注:ファイルをロックおよびロック解除する方法に関する他の投稿を読みました。気づかなかった特別なものは見つかりませんでした。そこで、手元にある問題をよりよく理解するために、ここにシナリオを配置します。
私の経験では、FileChannel.lockは、jvmの複数のインスタンスからの異なるオブジェクトがファイルをロックおよび更新しようとしているときにファイルのロックおよびロック解除を保証しません。
私のアプリケーションのシナリオは次のとおりです。ファイルを更新する3つの別個のプログラムがあります。これらのプログラムは、さまざまなjvmインスタンスで実行されています。プログラムがA、B、Cであるとします。ファイルはFです。Aがファイルをロックした場合、F、B、およびCは、Fが解放されるのを待ってから、他のプログラムの1つがファイルを取得できるようにする必要があります。プログラムが同じjvmインスタンスで実行されている場合、これは正常に機能します。残念ながら、これは複数のjvmインスタンスでは機能しません。
Fを更新する必要があるかどうかを示すフラットファイルを作成するという別のアイデアがありました。そのフラットファイルのコンテンツは、LOCKEDまたはUNLOCKEDのいずれかになります。デフォルト/初期値はロック解除されます。したがって、プログラムの1つがFを更新する場合は、フラットファイルのフラグを確認する必要があります。フラグがLOCKEDの場合、待機する必要があります。ただし、このアプローチでは問題があります。複数のプログラムがフラットファイルをまったく同時に開いて「UNLOCKED」を表示した場合、またはフラットファイルがUNLOCKEDを読み取るのを待っていた2つのプログラムが、ファイルの読み取りを正確に同時に表示した場合はどうなりますか。ロック解除されました」?
何か案が?