FileChannel.lock
How can I lock a file using java (if possible)
具有
FileOutputStream
NonWritableChannelException
FileOutputStream out = new FileOutputStream(file);
try {
java.nio.channels.FileLock lock = out.getChannel().lock();
try {
...
} finally {
lock.release();
}
} finally {
out.close();
}
lock
将阻塞,直到可以锁定区域、关闭此通道或中断调用线程(以先到者为准)。
但是,每次我试图锁定同一个文件(跨整个文件的区域)时,都会得到一个
OverlappingFileLockException
它被抛出
这与锁的逻辑相矛盾,并且使得无法使用文件锁,因为如果队列中只允许一个线程(其他线程立即抛出),则需要手动同步资源访问
重叠FileLockException
).
lock(0, Long.MAX_VALUE, false)
哪里
false
指
shared
属性不会更改此行为。