Java 尝试锁定文件通道时发生OverlappingFileLockException
场所:Java 尝试锁定文件通道时发生OverlappingFileLockException,java,locking,Java,Locking,场所: 每次尝试锁定文件时,我都会收到OverlappingFileLockException(这适用于所有文件) 我有一台刚开机的机器 通过Eclipse、java v1.6在Windows/Linux上进行测试 只有一个Eclipse实例使用这个程序运行 此程序中仅运行一个线程(事件调度线程) 我试图锁定以前从未接触过的文件 使用lock()和trylock()时出现相同的问题 将FileOutputStream()更改为RandomAccessFile()会产生相同的结果 我试图在一个
- 每次尝试锁定文件时,我都会收到OverlappingFileLockException(这适用于所有文件)
- 我有一台刚开机的机器
- 通过Eclipse、java v1.6在Windows/Linux上进行测试
- 只有一个Eclipse实例使用这个程序运行
- 此程序中仅运行一个线程(事件调度线程)
- 我试图锁定以前从未接触过的文件
- 使用lock()和trylock()时出现相同的问题
- 将FileOutputStream()更改为RandomAccessFile()会产生相同的结果
public static synchronized FileLocking lockFile(String fileName) {
FileLocking result = null;
FileChannel channel = null;
try {
channel = new FileOutputStream(fileName).getChannel();
FileLock lock = channel.lock();
lock = channel.tryLock();
result = new FileLocking(channel, lock);
} catch (Exception e) {
Log(ERR, "Exception when locking " + e.getMessage());
e.printStackTrace();
} finally {
try {
channel.close();
} catch (IOException e) {
Log(ERR, "IOE: " + e.getMessage());
e.printStackTrace();
}
}
return result;
}
目前,我发现以下错误:
[ERR]: (pid:13) Exception when locking null
java.nio.channels.OverlappingFileLockException
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.checkList(Unknown Source)
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.add(Unknown Source)
at sun.nio.ch.FileChannelImpl.tryLock(Unknown Source)
at java.nio.channels.FileChannel.tryLock(Unknown Source)
at com.xxx.utils.FileLocking.lockFile(FileLocking.java:29)`
非常感谢您的解释和/或编码技术。您为什么在
锁定之后再次调用tryLock
?我错过什么了吗
当您第二次调用tryLock
时,会得到OverlappingFileLockException,因为锁已经由JVM持有。为什么异常的消息null
?这有点奇怪。
[ERR]: (pid:13) Exception when locking null
java.nio.channels.OverlappingFileLockException
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.checkList(Unknown Source)
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.add(Unknown Source)
at sun.nio.ch.FileChannelImpl.tryLock(Unknown Source)
at java.nio.channels.FileChannel.tryLock(Unknown Source)
at com.xxx.utils.FileLocking.lockFile(FileLocking.java:29)`