我试图编写一个示例程序来确定 JVM 不调用 finally() 的情况,如http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html中所述。
注意:如果在执行 try 或 catch 代码时 JVM 退出,则 finally 块可能不会执行。同样,如果执行 try 或 catch 代码的线程被中断或杀死,即使应用程序作为一个整体继续运行,finally 块也可能不会执行。
但是,在我写的所有情况下,finally 都被调用(除了thread.suspend()
没有thread.resume()
和System.exit()
情况)。甚至 finally 被调用,thread.stop()
而不是在其他各种论坛中提到的(下面的代码片段)。
有人可以帮忙吗?谢谢。
try {
final Thread thread = Thread.currentThread();
new Thread(new Runnable() {
@Override
@SuppressWarnings(value = "deprecation")
public void run() {
thread.stop();
// thread.suspend();
}
}).start();
while (true)
Thread.sleep(1000);
} finally {
System.out.print("finally called after stop");
}