【发布时间】:2015-11-21 19:55:12
【问题描述】:
我正在学习 FileOperations,并且正在编写一个程序来在 linux 机器上实现 FileLocking。
这个程序的目的是,如果多人调用这个程序,实例应该获得一个文件锁(类似于Linux系统上的flock)。
我通过从两个不同的终端运行类文件来尝试我的程序是否正常工作。但是,它每次都返回true,也就是说,即使第一个进程运行并且没有释放锁,第二个进程也能够获得锁。
我的代码是
public boolean getLock() throws FileNotFoundException, IOException{
File lockFile = new File(conf_file);
System.out.println("Attempting to aquire"
+ " exclusive lock on " + conf_file);
RandomAccessFile f = new RandomAccessFile(lockFile, "rw");
FileChannel channel = f.getChannel();
FileLock lock;
lock = channel.lock();
if(lock != null && lock.isValid()){
f.close();
return true;
}
else{
f.close();
return false;
}
}
我在这里做错了什么?
【问题讨论】:
-
删除
f.close()并尝试 -
谢谢@nohup,它成功了。但是它现在在我的 ide 中显示一个警告,说资源泄漏。我怎样才能摆脱它?
-
请把它写成答案,我会接受的。
标签: java linux locking file-locking