Javaファイルロックについて混乱があります。
これが私の状況です。
- 各スレッドはファイルの読み取り/書き込みができます。
- 私のファイル操作メソッドは、複数のスレッドから同時に呼び出すことができます
そして、私の目標は明確です。スレッドによるファイルへの同時書き込みはありません。ファイルの書き込みは常に1つのスレッドで許可されます。
私の質問は
FileOutputStream.write()がスレッドセーフである場合、ロックされたファイルが解放されるまでwrite()のコードがブロックされるため、コードに同時実行メカニズムを配置する必要はありませんでした。ただし、ファイルがスレッドによって開かれると、プログラムがブロックされないように見えます(これについてはよくわかりません)。
FileOutputStream.write()がスレッドセーフではなかった場合、一度にスレッドのみがファイルにアクセスできるようにするために、追加のコードを作成する必要があります。したがって、FileChannel.lock()を使用してこれを行いました。ただし、JDKドキュメントとは異なり、ブロックせずにOverlappingFileLockExceptionをスローします。
明確なアドバイスをいただければ幸いです。