Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在释放Java文件锁时遇到问题_Java_Nio_Filechannel_Filelock_Randomaccessfile - Fatal编程技术网

在释放Java文件锁时遇到问题

在释放Java文件锁时遇到问题,java,nio,filechannel,filelock,randomaccessfile,Java,Nio,Filechannel,Filelock,Randomaccessfile,我与nio合作不多,在释放文件锁方面遇到了一些问题。基本上,在JVM-A中,我在一个文件上有一个不可共享的写锁,看起来像这样: File lockfile = new File("m.lock"); RandomAccessFile writeFile = new RandomAccessFile(lockfile, "rw"); FileChannel writeChannel = writeFile.getChannel(); FileLock writeLock = writeChanne

我与nio合作不多,在释放文件锁方面遇到了一些问题。基本上,在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);
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);
}
readChannel.tryLock(0L, Long.MAX_VALUE, true);
然后在JVM-B中,我尝试在同一个文件上创建一个可共享的读锁,如下所示:

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);
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);
}
readChannel.tryLock(0L, Long.MAX_VALUE, true);
我的问题是JVM-B永远循环,永远不会得到可共享的读锁。即使JVM-A执行
writeLock.release()
writeChannel.close()
writeFile.close()即使JVM-A退出并不再运行,JVM-B仍然无法获得文件的可共享读锁


那么我在这里遗漏了什么呢?

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

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);
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);
}
readChannel.tryLock(0L, Long.MAX_VALUE, true);
与此相反:

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

我错过了变量赋值。

请写出您得到的输出,以便更好地理解。