无法发布Java FileLock

时间:2012-11-15 17:54:47

标签: java nio filechannel filelock randomaccessfile

我没有和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中我尝试在同一个文件上创建一个SHARABLE读锁定,如下所示:

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永远循环,永远不会获得SHARABLE读锁定。即使JVM-A执行writeLock.release(); writeChannel.close();writeFile.close();,即使JVM-A退出并且不再运行,JVM-B仍然无法获得SHARABLE读锁定文件。

那我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

我的错误是每个人,我发现了我的错误。我的代码看起来像这样:

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

而不是:

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

我错过了变量赋值。