尝试锁定文件通道时出现OverlappingFileLockException

ola*_*son 5 java locking

物业:

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

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

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

    public FileLocking(FileChannel f, FileLock l) {
        channel = f;
        lock = l;
    }
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

}

目前,我收到以下错误:

[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)`
Run Code Online (Sandbox Code Playgroud)

解释和/或编码技术受到高度赞赏.

Ant*_*ton 8

你为什么叫tryLocklock再次?我错过了什么吗?

当您tryLock第二次调用时,由于JVM已经锁定了锁,因此会出现OverlappingFileLockException .