是否有可能永远不会释放文件锁?

时间:2015-03-06 14:22:51

标签: java locking release jvm-crash

给出以下文件锁定请求:

FileLock lock = null;
try {
    lock = randomAccessFile.getChannel().lock(0, Long.MAX_VALUE, mode.shared);
    // work with file
} finally {
    if (lock != null) {
        lock.release();
    }
}

目标操作系统是MS Windows,finally块是否有可能被执行,因此锁永远不会释放?例如,如果JVM崩溃了怎么办?如何处理这种无主人锁?

1 个答案:

答案 0 :(得分:4)

当进程退出时,任何操作系统都会自动释放该进程获取的所有资源,但无法保证何时会发生这种情况。

对于Windows,Oracle JVM使用LockFileEx function作为本机实现,并根据msdn https://msdn.microsoft.com/en-us/library/aa365202.aspx

  

如果进程因文件的一部分被锁定而终止,或者关闭具有未完成锁定的文件,则操作系统将锁定锁定。但是,操作系统解锁这些锁所需的时间取决于可用的系统资源。因此,建议您的进程显式解锁终止时锁定的所有文件。如果不这样做,如果操作系统尚未解锁,则可能会拒绝访问这些文件。

相关问题