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

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

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

答案是 –

Runtime#addShutdownHook 

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

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

Java文档

代码 –

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

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

oracle网站上的Java教程说。

当try块退出时,finally块总是执行。 这确保即使发生意外exception也会执行finally块。

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

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