【发布时间】:2015-03-06 14:22:51
【问题描述】:
给定以下文件锁定请求:
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 崩溃了怎么办?如何处理这样的无所有者锁?
【问题讨论】:
-
无法保证 finally 块中的代码将永远运行...您可以在 try { } 块中的代码中进入无限循环。至于是否/何时释放文件锁,我并没有权威的答案,但我从经验中发现,即使你不释放锁,一般也会很快释放(不是总是立即)在 JVM 退出后。如果这不起作用,则需要重新启动。
-
@ControlAltDel 重新启动是指重新启动启动(崩溃的)JVM 的计算机?
-
是重启电脑
-
@ControlAltDel 退出 JVM 将释放锁(如果没有其他操作)。无需whatsoever重新启动计算机。
标签: java locking release jvm-crash