私は nio をあまり使ったことがなく、FileLock の解放に問題があります。基本的に、JVM-A では、次のようなファイルに NON-SHARABLE 書き込みロックがあります。
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 読み取りロックを取得できません。
それで、私はここで何が欠けていますか?