2012-02-07 13 views
1

ローカルFS上のファイルを処理するためのJavaアプリケーションを構築していますが(NTFSですが、将来的にLinuxファイルシステムへの拡張が容易なソリューションです)問題は、同時に実行されているアプリケーションの2つのインスタンス(プロセス)の場合に、1つのファイルを複数回処理することができないことです。ローカルFS上のファイルをロックする

私は何とか処理する前に各ファイルをロックする必要があるようです。アプリケーションはデータベースを使用せず、ロック目的のためだけに使用することは便利ではないようです。

だから私はファイル名にポストフィックスを追加することを考えていました。問題は、ファイル名が末尾で終わっているかどうかを尋ねて、後でアトミックに後置を付加する方法(もし可能であれば)です。

私が必要とするものを達成するためのその他のトリックも高く評価されています。

+0

なぜ排他モードでファイルを開いていないと(別のインスタンスがちょうどそれを開くことはできません)、それが開かれ続けますか? –

答えて

1

おそらく、ほとんどのファイルシステムでファイルの名前変更操作がアトミックであるという利点があります。あなたのロジックは、このようなことができます:

  1. は、ファイルリストを取得し、ファイルごとに: - ファイル
  2. の作業を名前変更が失敗した場合 -
  3. 名前の変更が成功した場合、ファイル
  4. の名前を変更してみません2
+0

私はこのように行くだろうと思う。ありがとう! –

0

このような何かが動作するはずです:

File someFile = new File(path); 
if (!someFile.getName().endsWith(".locked")) { 
    File lockedFile = new File(someFile.getAbsolutePath() + ".locked"); 
    someFile.renameTo(lockedFile); 
} 
+1

"テストと名前の変更"アクションがアトミックではないため、これは実際に動作するのでしょうか、競合状態になりますか? –

関連する問題