在多线程环境下使用FileLock实现对文件的锁功能,避免多个线程同时操作同一文件,
程序:
public class Demo{
FileLock lock;
/* 读写文件*/
public RWFile(){
lock=tryLock();
if(lock!=null){
// 锁成功
可以对文件做处理 ..
unlock();
}else{
//锁失败
}
}
/*锁操作 返回非空表示锁成功*/
private FileLock tryLock() throws IOException {
File lockF = new File(root, "xxx.dat"); // 要锁的文件
lockF.deleteOnExit(); // 指定在退出时释放锁
RandomAccessFile file = new RandomAccessFile(lockF, "rws"); //指定要锁的文件
FileLock res = null;
try {
res = file.getChannel().tryLock(); // 试图取得文件的锁
} catch(OverlappingFileLockException oe) { // 文件被其它线程锁时抛出此异常
file.close();
return null;
} catch(IOException e) {
LOG.error("Cannot create lock on " + lockF, e);
file.close();
throw e;
}
return res;
}
/* 解锁 操作*/
private void unlock() throws IOException {
if (this.lock == null)
return;
this.lock.release();
lock.channel().close();
lock = null;
}
}