【问题标题】:Having trouble releasing a Java FileLock无法释放 Java FileLock
【发布时间】:2012-11-15 17:54:47
【问题描述】:

我与 nio 的合作不多,我在发布 FileLock 时遇到了一些麻烦。基本上,在 JVM-A 中,我在一个看起来像这样的文件上有一个不可共享的写锁:

File lockfile = new File("m.lock");
RandomAccessFile writeFile = new RandomAccessFile(lockfile, "rw");
FileChannel writeChannel = writeFile.getChannel();
FileLock writeLock = writeChannel.tryLock(0L, Long.MAX_VALUE, false);

然后在 JVM-B 中,我尝试在同一个文件上创建一个共享读锁,看起来像这样:

File lockfile = new File("m.lock");
RandomAccessFile readFile = new RandomAccessFile(lockfile, "r");
FileChannel readChannel = readFile.getChannel();
FileLock readLock = readChannel.tryLock(0L, Long.MAX_VALUE, true);  
while (readLock == null) {
    System.out.println("unable to get lock");
    Thread.sleep(5000);
    readLock = readChannel.tryLock(0L, Long.MAX_VALUE, true);
}

我的问题是 JVM-B 永远循环并且永远不会获得共享读锁。即使 JVM-A 执行了 writeLock.release(); writeChannel.close();writeFile.close(); 并且即使 JVM-A 退出并且不再运行,JVM-B 仍然无法获得文件的可共享读锁。

那么我在这里错过了什么?

【问题讨论】:

  • 请写出你得到的输出以便更好地理解。

标签: java nio filechannel filelock randomaccessfile


【解决方案1】:

我的错误大家,我发现了我的错误。我的代码如下所示:

readChannel.tryLock(0L, Long.MAX_VALUE, true);

而不是这个:

readLock = readChannel.tryLock(0L, Long.MAX_VALUE, true);

我错过了变量赋值。

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多