如何避免finally块不执行的场景

时间:2014-11-06 06:45:31

标签: java java-ee

我在接受采访时被问到,当最后一块没有执行时。我回答说,当JVM在调用finally或调用System.exit()之前突然关闭时。然后我被问到如何避免这种情况,以便我们的程序始终保持执行状态。应该处理这种情况。我们能处理这种情况吗?如果有,怎么样? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

即使最终失败但仍会执行shutdownhook。

答案是 -

Runtime#addShutdownHook
  

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

     
      
  • 当最后一个非守护程序线程退出或调用退出(等效,System.exit)方法时,程序正常退出,或者
  •   
  • 虚拟机终止以响应用户中断,例如键入^ C或系统范围的事件,例如用户注销或
      系统关闭。
  •   

Java docs

代码 -

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

答案 1 :(得分:0)

如果你用足够大的枪杀死你的系统,它最终会对你不好。您必须拥有一个冗余系统才能使代码继续运行。

答案 2 :(得分:0)

oracle网站上的Java教程说。

  

当try块退出时,finally块始终执行。这个   确保即使意外发生也执行finally块   异常发生。

     

注意:如果在执行try或catch代码时JVM退出,   那么finally块可能不会执行。同样,如果线程   执行try或catch代码被中断或终止,最后   即使作为一个整体的应用程序,块也可能无法执行   继续进行。

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