9

JavaのFileLockは、同じプロセス内または異なるプロセス間、またはその両方の複数のスレッド間で安全ですか?

javadocは次のように述べています。

ファイル ロックは、Java 仮想マシン全体に代わって保持されます。これらは、同じ仮想マシン内の複数のスレッドによるファイルへのアクセスを制御するのには適していません。

ファイル ロック オブジェクトは、複数の同時スレッドで安全に使用できます。

私は本当に理解していません: FileLock が同じ単一プロセス内の複数のスレッド間、複数の異なるプロセス間、またはその両方で安全であることを意味しますか?

4

2 に答える 2

3

さらに下:

このファイルロックAPIは、基盤となるオペレーティングシステムのネイティブロック機能に直接マップすることを目的としています。したがって、ファイルに保持されているロックは、それらのプログラムが記述されている言語に関係なく、ファイルにアクセスできるすべてのプログラムに表示される必要があります。

これは、その目的が異なるプロセス間で使用されることであることを強く示唆しています。

この行:

同じ仮想マシン内の複数のスレッドによるファイルへのアクセスを制御するのには適していません。

複数のスレッドを持つ単一のプロセスがある場合は、これを使用しないことをお勧めします。その場合、代わりにsynchronizedセクションまたはを使用できますReadWriteLock

于 2012-05-10T09:56:07.123 に答える
2

オブジェクトはプレーン Java オブジェクトとして見るとスレッドセーフですが、他のスレッドが同じファイルを開くのを止めません。つまり、彼らが提供するサービスを見ると、彼らは安全ではありません.

于 2012-05-10T09:46:07.330 に答える