2

Javaファイルロックについて混乱があります。

これが私の状況です。

  1. 各スレッドはファイルの読み取り/書き込みができます。
  2. 私のファイル操作メソッドは、複数のスレッドから同時に呼び出すことができます

そして、私の目標は明確です。スレッドによるファイルへの同時書き込みはありません。ファイルの書き込みは常に1つのスレッドで許可されます。

私の質問は

  1. FileOutputStream.write()がスレッドセーフである場合、ロックされたファイルが解放されるまでwrite()のコードがブロックされるため、コードに同時実行メカニズムを配置する必要はありませんでした。ただし、ファイルがスレッドによって開かれると、プログラムがブロックされないように見えます(これについてはよくわかりません)。

  2. FileOutputStream.write()がスレッドセーフではなかった場合、一度にスレッドのみがファイルにアクセスできるようにするために、追加のコードを作成する必要があります。したがって、FileChannel.lock()を使用してこれを行いました。ただし、JDKドキュメントとは異なり、ブロックせずにOverlappingFileLockExceptionをスローします。

明確なアドバイスをいただければ幸いです。

4

1 に答える 1

1

スレッドセーフではないため、プログラムで安全を確保する必要があります。アプリに主要なパフォーマンス要件がないと仮定して、関連するコードを同期ブロックに配置するだけです。

于 2012-07-23T05:10:40.587 に答える