Java 当try或catch块被中断时,finally块何时不执行
当try或catch块被中断时,finally块何时不执行?文档说,“如果执行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由于某种原因崩溃(例
最终不执行的唯一合法方法是调用系统。退出或运行时。在中停止尝试或捕获在应用程序之前突然结束,例如
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
停止线程,则执行最后
块。