sp0*_*00m 1 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();
}
}
Run Code Online (Sandbox Code Playgroud)
目标操作系统是 MS Windows,是否有可能finally永远不会执行该块,从而永远不会释放锁?例如,如果 JVM 崩溃了怎么办?如何处理这种无所有者锁定?
当进程退出时,任何操作系统都会自动释放进程获取的所有资源,但无法保证何时会发生这种情况。
在 Windows 的情况下,Oracle JVM 使用LockFileEx 函数作为本机实现并根据 msdn https://msdn.microsoft.com/en-us/library/aa365202.aspx
如果进程以文件的一部分被锁定或关闭具有未完成锁的文件而终止,则操作系统会解锁这些锁。但是,操作系统解锁这些锁所需的时间取决于可用的系统资源。因此,建议您的进程在终止时明确解锁它已锁定的所有文件。如果不这样做,如果操作系统尚未解锁这些文件,则可能会拒绝访问这些文件。
| 归档时间: |
|
| 查看次数: |
1411 次 |
| 最近记录: |