如果运行函数的线程被中断,finally 块是否会执行?
2022-09-01 23:31:27
如果我有一个带有 try/finally 部分的函数,并且运行它的线程在 try 块中被中断,那么 finally 块会在中断实际发生之前执行吗?
如果我有一个带有 try/finally 部分的函数,并且运行它的线程在 try 块中被中断,那么 finally 块会在中断实际发生之前执行吗?
根据Java教程,“如果执行或代码的线程被中断或杀死,即使整个应用程序继续运行,该块也可能无法执行。try
catch
finally
这是完整的段落:
块始终在块退出时执行。这可确保即使发生意外异常,也会执行块。但是,它不仅对异常处理有用,还允许程序员避免清理代码意外地被 、 、 或 绕过。将清理代码放在块中始终是一种很好的做法,即使预计不会出现异常。
finally
try
finally
finally
return
continue
break
finally
注意:如果 JVM 在执行 或 代码时退出,则该块可能不会执行。同样,如果执行 或 代码的线程被中断或终止,则即使应用程序作为一个整体继续,该块也可能无法执行。
try
catch
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();
它打印 - 最终执行
Java中的线程中断只是设置一个标志。它不会导致当前正在执行的代码发生任何特殊情况,也不会影响控制流。
如果您的线程正在参与或尝试输入引发 InterruptedException 的操作,则从调用该方法的位置引发异常,如果它位于 try 块内,则 final 将在异常离开之前执行,就像正常一样。