首页 文章

中断的Java线程是否真的可以跳过finally子句?

提问于
浏览
16

当我从the Oracle Java tutorial读到这篇文章时,我正在检查JVM中的守护程序线程是否以某种特殊方式处理 finally 块(它们没有,好吗?) .

注意:如果在执行try或catch代码时JVM退出,则finally块可能无法执行 . 同样,如果执行try或catch代码的线程被中断或终止,则即使应用程序作为一个整体继续,finally块也可能无法执行 .

(重点是我的 . )关于打断的一点引起了我的注意!

我的信念是,如果一个线程在try / catch代码中并且被中断,那么我们要么(或最终进入)一个状态(例如睡眠,等待),我们最终会抛出一个 InterruptedException ,或者我们不是我们正常或异常退出,但在所有情况下,我们都会达到 finally 条款 .

我错过了什么?在应用程序继续运行的同时,是否真的有一种方法可以让线程被中断然后跳过 finally

1 回答

  • 11

    因为你特意询问守护程序线程:记住守护程序线程在jvm的最后一个非守护程序线程终止时消失,所以在这种情况下守护程序线程可以在没有执行finally块的情况下死掉(或者它将要执行的任何其他代码,没什么特别的最后块) . 当jvm终止时,不要将守护程序线程用于任何你不介意丢弃在地板上的东西 .

    否则,中断对快捷方式块没有任何作用 . 中断点是被中断的线程处于控制之中并且可以完成其执行,包括关闭资源,但是它需要 .

    这些教程非常有用,但它们不具有权威性 . 在这种情况下的措辞使用了中断这个词,在这种情况下,假设它特指线程中断是不正确的,这似乎是合理的 .

相关问题