如果运行该函数的线程被中断,finally块会执行吗?

如果我有一个带有try / finally部分的函数,而运行该线程的线程在try块中被中断,那么在中断真正发生之前,finally块会执行吗?

回答:

根据Java指南,“如果执行trycatch代码的线程被中断或杀死,则finally即使整个应用程序继续运行,该块也可能无法执行。”

这是完整的段落:

finally始终

try退出时执行。这样可以确保finally即使发生意外异常也可以执行该块。但是,finally是的不仅仅是异常处理更加有用-

它允许程序员避免不慎被绕过具有清除代码returncontinuebreakfinally即使在没有例外的情况下,将清除代码放在块中始终是一个好习惯。

如果在执行trycatch代码时JVM退出,则该finally块可能不会执行。同样,如果执行trycatch代码的线程被中断或杀死,则finally即使整个应用程序继续运行,该块也可能不会执行。

class Thread1 implements Runnable {

@Override

public void run() {

try {

Thread.sleep(10000);

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

System.out.println("finally executed");

}

}

}

t1.start();

t1.interrupt();

打印 -最终执行

以上是 如果运行该函数的线程被中断,finally块会执行吗? 的全部内容, 来源链接: utcz.com/qa/426722.html

回到顶部