gpt4 book ai didi

java - 尝试锁定文件 channel 时出现 OverlappingFileLockException

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:03 27 4
gpt4 key购买 nike

场所:

  • 我每次尝试锁定文件时都会得到 OverlappingFileLockException(这适用于所有文件)
  • 我有一台刚启动的机器
  • 通过 Eclipse、java v1.6 在 Windows/Linux 上测试
  • 只有一个 Eclipse 实例与这个程序一起运行
  • 只有一个线程在这个程序中运行(事件调度线程)
  • 我曾尝试锁定我以前从未接触过的文件
  • 同样的问题同时使用 lock() 和 trylock()
  • 从 FileOutputStream() 更改为 RandomAccessFile() 会产生相同的结果

我试图在一个静态函数中锁定一个文件,该函数返回一个包含 channel 和锁的组合对象,因此另一个函数 unlockFile(FileLocking fl) 可用于关闭然后 channel 并释放锁。组合的对象类如下所示:`

   public class FileLocking {
public FileChannel channel;
public FileLock lock;

public FileLocking(FileChannel f, FileLock l) {
channel = f;
lock = l;
}

锁定文件的函数如下所示:

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)`

非常感谢解释和/或编码技术。

最佳答案

为什么在 lock 之后又调用了 tryLock ?我错过了什么吗?

当您第二次调用 tryLock 时,您会得到 OverlappingFileLockException,因为锁已经被 JVM 持有。

关于java - 尝试锁定文件 channel 时出现 OverlappingFileLockException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com