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

and*_*ndy 5 java finally

try或catch块被中断时finally块是什么时候不执行的?doc说"如果执行try或catch代码的线程被中断或终止,即使整个应用程序继续执行,finally块也可能无法执行".有人能举例说明这种情况吗?

Pat*_*lis 11

可以在这里找到好的答案.

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

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

值得注意的是,由于块中的任何return语句finally都将覆盖/ blocks 中的任何返回或异常抛出,如果发生这种情况,程序行为可能很快变得不稳定并且难以调试.没有什么值得采取预防措施(因为它只发生在非常罕见的情况下),但值得注意,以便在发生时能够识别它.trycatch


Evg*_*eev 7

finally不执行的唯一合法方式是打电话System.exitRuntime.halttrycatch