2014-11-06 57 views
2

我在采访中被问到finally块不能执行时。我回答说,当JVM在调用finally或调用System.exit()之前突然关闭。然后我被问及如何避免这种情况,以便我们的程序始终保持执行。应该处理这种情况。我们可以处理这种情况吗?如果是的话如何? 在此先感谢。如何避免finally块不执行的场景

回答

2

即使最后失败,但仍然会执行shutdownhook。

答案是 -

Runtime#addShutdownHook 

Java虚拟机在响应关闭以2种 事件:

  • 程序正常退出,最后的非守护线程退出时或当退出(等效地,System.exit)方法被调用时,或者响应于用户中断而终止虚拟机时,例如打字^ C或全系统事件,如用户注销或系统关闭。

Java docs

码 -

Runtime.addShutdownHook(new Thread { 
    public void run() { 
    System.out.println("Just before going down.."); 
    }); 
0

如果你杀死一个足够大的枪你的系统,它最终会停止善待你。你必须有一个冗余系统才能让你的代码继续下去。

0

oracle网站上的Java教程说。

finally块总是在try块退出时执行。即使发生意外的 异常,此 可确保执行finally块。

注意:如果JVM在try或catch代码执行时退出, 那么finally块可能无法执行。同样,如果执行try或catch代码的线程 被中断或终止,则尽管应用程序整体 仍在继续,但最终的 块可能不会执行。

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html