単純だけど限定的に使えそうなロック
import java.io.File;
/**
* ファイル有無ロック.
*/
public final class FilebaseLock{
private File lockFile;
public FilebaseLock(String filepath){
this.lockFile = new File(filepath);
}
/**
* ロック開始.
* @return true ロック成功
*/
public boolean begin(){
return this.begin(0);
}
/**
* ロック開始.
* @param maxSec 排他最大待ち合わせ時間を秒数で指定する
* @return true=ロック成功、false=ロック失敗
*/
public synchronized boolean begin(int maxSec){
try{
for(int n=maxSec;0 < n || maxSec < 1;n--){
if (this.lockFile.createNewFile()) return true;
try{Thread.sleep(1000);}catch(InterruptedException e){}
}
}catch(Exception e){
}finally{
}
return false;
}
/**
* ロック終了.
*/
public void end(){
if (this.lockFile.exists()){
this.lockFile.delete();
}
}
}
----------------------------------------------------
(使用例)
FilebaseLock s = new FilebaseLock(filepath);
try{
boolean b = s.begin(60);
// 最大 60 秒 待つ。 引数なしの begin(); 実行なら、永久に待つ!!
// true=ロック成功、false=ロック失敗
: //対象処理
}finally{
s.end();
}