我在接受采访时被问到,当最后一块没有执行时。我回答说,当JVM在调用finally或调用System.exit()之前突然关闭时。然后我被问到如何避免这种情况,以便我们的程序始终保持执行状态。应该处理这种情况。我们能处理这种情况吗?如果有,怎么样? 提前谢谢。
答案 0 :(得分:2)
即使最终失败但仍会执行shutdownhook。
答案是 -
Runtime#addShutdownHook
Java虚拟机关闭以响应两种 事件:
- 当最后一个非守护程序线程退出或调用退出(等效,System.exit)方法时,程序正常退出,或者
- 虚拟机终止以响应用户中断,例如键入^ C或系统范围的事件,例如用户注销或
系统关闭。
代码 -
Runtime.addShutdownHook(new Thread {
public void run() {
System.out.println("Just before going down..");
});
答案 1 :(得分:0)
如果你用足够大的枪杀死你的系统,它最终会对你不好。您必须拥有一个冗余系统才能使代码继续运行。
答案 2 :(得分:0)
当try块退出时,finally块始终执行。这个 确保即使意外发生也执行finally块 异常发生。
注意:如果在执行try或catch代码时JVM退出, 那么finally块可能不会执行。同样,如果线程 执行try或catch代码被中断或终止,最后 即使作为一个整体的应用程序,块也可能无法执行 继续进行。
http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html