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