Java 防止多个 JVM 进程多次写入的文件锁不起作用
Java Filelock to prevent multiple writes by multiple JVM processes not working
我正在学习 FileOperations,并且正在编写一个程序来在 linux 机器上实现 FileLocking。
这个程序的目的是,如果多人调用这个程序,实例应该获得一个文件锁(类似于linux系统上的flock)。
我通过来自两个不同终端的 运行 class 文件尝试了我的程序是否正常工作。但是,它每次都返回 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()
方法,它应该可以工作。要删除评论中的警告,请将这些变量声明为实例变量,并在 removeLock()
.
等可能的另一种方法中执行 f.close
我正在学习 FileOperations,并且正在编写一个程序来在 linux 机器上实现 FileLocking。
这个程序的目的是,如果多人调用这个程序,实例应该获得一个文件锁(类似于linux系统上的flock)。
我通过来自两个不同终端的 运行 class 文件尝试了我的程序是否正常工作。但是,它每次都返回 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()
方法,它应该可以工作。要删除评论中的警告,请将这些变量声明为实例变量,并在 removeLock()
.