首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在发布Java FileLock时遇到问题

在发布Java FileLock时遇到问题
EN

Stack Overflow用户
提问于 2012-11-16 01:54:47
回答 1查看 640关注 0票数 0

我与nio的合作并不多,在发布FileLock时遇到了一些麻烦。基本上,在JVM-A中,我在文件上有一个不可共享的写锁,如下所示:

代码语言:javascript
复制
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中,我尝试在同一个文件上创建一个可共享的读锁,如下所示:

代码语言:javascript
复制
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仍然不能在文件上获得可共享的读锁定。

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

EN

回答 1

Stack Overflow用户

发布于 2012-11-16 04:03:56

我的错误各位,我找到了我的错误。我的代码看起来像这样:

代码语言:javascript
复制
readChannel.tryLock(0L, Long.MAX_VALUE, true);

而不是这样:

代码语言:javascript
复制
readLock = readChannel.tryLock(0L, Long.MAX_VALUE, true);

我错过了变量赋值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13403345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档