0

私はこの投稿を読みました。誰かがクラスjava.nio.FileLock.lock()でうまくいくかどうか教えてもらえますか?java.util.Properties

質問:

読み取ったプロパティファイルにロックをかけると、他の同時ロックのためにファイルがロックされますか?コードは次のようなものをロックします:



try {

     Properties prop = new Properties();
     FileInputStream fis = new FileInputStream(new File("/my/path"));
     FileLock lock = fis.getChannel().lock();
     prop.load(fis);

} catch (FileNotFoundException e) {
   //catch it...
} catch (IOException e) {
   //catch it...
}

//....
lock.release();
//...

ありがとう!


JavaDocsから:

1.単一のJava仮想マシンによって特定のファイルに保持されているロックは重複しません。

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

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

関連1:同じJVMから異なるスレッドから同じファイルをロックしようとしましたが、スレッドがすでにロックされているファイルをロックしようとするとエラーがスローされます。動作はJavaDoc仕様から期待されるものではないと思います。

2 aとbに関連:それらは矛盾しているように私には思えます。私は正しいですか?そうでない場合、誰かが私にポイントを説明できますか?

4

1 に答える 1

2

通常、ファイル ロックは推奨事項です。つまり、ファイル ロックを使用している JVM などの他のプロセスにのみ影響します。java.util.Propertiesまったくそれを行いませんが、ファイルも処理せず、入力ストリームのみを処理します。したがって、ファイルロックを設定/チェックしているファイルから入力ストリームを提供すると、機能します。ただし、単一の JVM 内ではなく、JVMのみです。Javadocを参照してください。

于 2012-02-27T09:00:26.933 に答える