Java 当try或catch块被中断时,finally块何时不执行

Java 当try或catch块被中断时,finally块何时不执行,java,finally,Java,Finally,当try或catch块被中断时,finally块何时不执行?文档说,“如果执行try或catch代码的线程被中断或终止,那么即使整个应用程序继续运行,finally块也可能不会执行。”有人能举例说明这种情况吗?使最终不执行的唯一合法方法是调用系统。退出或运行时。在中停止尝试或捕获在应用程序之前突然结束,例如 System.exit(); 即使是finally块之前的返回(例如,在try块中),也会在finally找到正确答案后执行 除了System.exit(),如果JVM由于某种原因崩溃(例

当try或catch块被中断时,finally块何时不执行?文档说,“如果执行try或catch代码的线程被中断或终止,那么即使整个应用程序继续运行,finally块也可能不会执行。”有人能举例说明这种情况吗?

使
最终不执行
的唯一合法方法是调用
系统。退出
运行时。在
中停止
尝试
捕获
在应用程序之前突然结束,例如

System.exit();
即使是
finally
块之前的返回(例如,在
try
块中),也会在
finally
找到正确答案后执行

除了
System.exit()
,如果JVM由于某种原因崩溃(例如
try
块中的无限循环),finally块将不会运行

就线程本身而言,只有在使用
stop()
方法(或
suspend()
而不使用
resume()
)停止线程时,
才会最终执行
块。调用
interrupt()
仍将导致执行
最终


还值得注意的是,由于
finally
块中的任何
return
语句都将覆盖
try
/
catch
块中的任何返回或异常抛出,因此如果发生这种情况,程序行为可能会很快变得不稳定,难以调试。没有什么值得预防的事情(因为它只发生在极少数情况下),但值得注意,以便在它发生时可以识别出来。

这指的是(大部分)超出正常Java执行范围的事情

  • 如果线程(成功)调用
    try
    块或
    catch
    块中的
    System.exit()
    ,则该调用不会在JLS中使用的意义上“终止”。如果另一个线程调用
    System.exit()
    ,也会发生同样的情况。在这种情况下,JVM只运行关闭挂钩

  • 如果JVM(硬)崩溃,所有Java活动都会立即停止

  • 如果操作系统(硬)杀死JVM进程,所有Java活动都会立即停止

  • 如果CPU芯片的电源关闭


那么问题是什么呢?@RAS是的,在中,我找到了我想知道的。但是,我的意思与这个问题不同。但是,答案确实存在。感谢您的回答,但我真正想知道的是句中interrupted的含义如果执行try或catch代码的线程被中断或终止,那么即使整个应用程序继续运行,finally块也可能不会执行。。它的意思是stop()还是suspend()。在您的回答中,对interrupt()的调用并不能阻止finally的执行。这是您要寻找的吗?这是错误的。如果通过
thread.stop
停止线程,则执行
最后
块。