中村@セイコーエプソンです.
> あう。誤解されています。
ありゃ.
> このFileLockクラスは、それぞれ別のJVMからのアクセスを想定して作成され
> ています。
> よって、File#deleteOnExit()を指定することで、JVM終了時に必ずロックファ
> イルが削除されてしまうと都合が悪いのです。
うーん.単純にロックをした(ファイルを作成した)プロセスが終了する時には
きちんとロックをはずす(ファイルを削除する)という処理ではないのでしょうか?
File#createNewFile()は作成できたらtrueが返りますから,
その後にFile#deleteOnExit()を設定するというのでは駄目なのでしょうか?
例)
File lock = new File(".lck");
if (!lock.createNewFile()) {
throw new Exception("Lock is used");
}
lock.deleteOnExit(); // ここで呼ぶ!
try {
// リソースへの処理
} finally {
lock.delete();
}
> # 別プロセスで作成されたロックファイルが消されてしまい、その間に更に
> # 別プロセスが割り込んできてしまうため。
もちろん,File#createNewFile()の判定を待たずにFile#deleteOnExit()を呼んだ
ら,
自分が取れていないロックを消すことになりそうですが.
-----
NAKAMURA, Tadashi
Network Technology Laboratory
Information Tech. R&D Dept.
SEIKO EPSON Corp.
tel +81-42-535-1733 fax -1734
Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
by M.F.