java - 什么时候 finally block 在 try 或 catch block 被中断时不执行

标签 java finally

<分区>

当 try 或 catch block 被中断时,finally block 什么时候不执行?文档说“如果执行 try 或 catch 代码的线程被中断或杀死,则 finally block 可能不会执行,即使整个应用程序仍在继续。”有人可以举例说明这种情况吗?

最佳答案

可以找到好的答案here .

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

就线程本身而言,只有在使用 stop() 方法(或 suspend() 没有 resume()) finally block 不会被执行。调用 interrupt() 仍会导致执行 finally block 。

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

关于java - 什么时候 finally block 在 try 或 catch block 被中断时不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17424801/

相关文章:

java - 将 C++ vector 传递给文件编写器

java - run-Jetty-运行 Eclipse 插件 : allow only loopback connections

Java println(charArray + String) 与 println(charArray)

c# - try/catch/finally 中 "finally"的用途是什么

java - Java中使用InputStreamReader类时缺少字符

java - 删除单链表中给定位置和头之后的节点

c# - 如何在C#中使用try-finally构造?

exception - try/finally 是否忽略异常?

java - 最后的行为很奇怪吗?