2014-11-06 53 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