提问人:NightShade 提问时间:2/25/2021 更新时间:2/25/2021 访问量:353
Java FileLock 文件并在退出时将其删除
Java FileLock on a file and delete it on exit
问:
我有两个 JVM 进程在运行,比如 Process1 和 Process2。每个进程都运行以下内容:
File lockFile = new File("lock");
if (!lockFile.exists()) {
lockFile.createNewFile();
}
RandomAccessFile lockRAF = new RandomAccessFile(lockFile, "rw");
FileChannel channel = lockRAF.getChannel();
FileLock fileLock;
try {
fileLock = channel.tryLock();
} catch (OverlappingFileLockException e) {
...
} ...
// do something exclusive
fileLock.release();
lockRAF.close();
lockFile.delete();
(不显示异常处理,因为它不是问题的重点)。
问题来自于删除末尾的文件,其中:
- Process1 获取一个 FileLock,执行一些工作,然后释放它
- 进程 2 获取锁
- Process1 删除文件
- 然后,Process1 尝试再次调用相同的代码片段。这是有效的,因为它创建了一个新文件,从中获取锁。
- 结果是,这两个进程都获得了一个本应是排他性的锁。
注意:这发生在 Linux 上(Windows 不允许在锁定时删除文件)。
我怎样才能以一种允许在最后删除锁定文件的方式解决这个问题?File.deleteOnExist 不能解决问题。
答: 暂无答案
评论