【发布时间】:2013-10-21 17:32:36
【问题描述】:
在the Java tutorial 中提到了try { ... } finally { ... }:
注意:如果在执行 try 或 catch 代码时 JVM 退出, 那么finally块可能不会执行。同样,如果 线程 执行 try 或 catch 代码被中断或杀死,finally 即使应用程序作为一个整体,块也可能不会执行 继续。
线程是否可以被interrupted或杀死 (I thought that was impossible?)这样finally块在JVM运行时不会被执行此线程未退出/终止? (我很困惑,因为上面的引用非常明确,没有太多误解的余地。)
编辑:将问题分解为核心意图。
【问题讨论】:
-
可能有数百个
try-catch-finally块写入应用程序 servlet。你的问题到底是什么意思? -
我想知道在 JVM 未关闭时已经输入了相应的
try块时,finally中的代码是如何不执行的。从引用中,我了解到即使不调用Thread.kill,线程也是可能的。我想知道 servlet 容器是否有办法关闭 Web 应用程序,这样我就不能依赖finally被执行。 -
如教程和可能的 dup Q/A 中所述,不执行
finally的唯一方法是 JVM 停止。这是通过执行System.exit(0);或JVM 崩溃。 -
@LuiggiMendoza 是的。但关键是,是的,最终可以被打断(如果你正在做一些愚蠢和疯狂的事情)。 OP看到我的答案。也许这有帮助。
标签: java multithreading exit