如果运行该函数的线程被中断,finally块会执行吗?
如果我有一个带有try / finally部分的函数,而运行该线程的线程在try块中被中断,那么在中断真正发生之前,finally块会执行吗?
回答:
根据Java指南,“如果执行try
或catch
代码的线程被中断或杀死,则finally
即使整个应用程序继续运行,该块也可能无法执行。”
这是完整的段落:
该
finally
块 始终在
try
退出时执行。这样可以确保finally
即使发生意外异常也可以执行该块。但是,finally
是的不仅仅是异常处理更加有用-它允许程序员避免不慎被绕过具有清除代码
return
,continue
或break
。finally
即使在没有例外的情况下,将清除代码放在块中始终是一个好习惯。如果在执行
try
或catch
代码时JVM退出,则该finally
块可能不会执行。同样,如果执行try
或catch
代码的线程被中断或杀死,则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