2012-08-11 49 views
0

我正在通過java的關閉鉤子功能,我的分析是..shutdownhook允許註冊一個線程,它將立即創建,但只有當JVM結束時纔會啓動!所以它是某種「全局jvm終結器」,你可以在這個線程中做出有用的東西(例如像嵌入式hsqldb服務器那樣關閉java ressources)。這適用於System.exit(),或者與CTRL-C/kill -15(但當然,在unix上不使用kill -9)一起使用。關於shutdownhook的理解

請提供更實際的用途,並請如果possibe一個小例子將有助於使理解更清晰..!

+0

我不會稱他們(或認爲他們)*全球jvm終結者*這不是真的一樣的事情。這是JVM開始關閉時確保執行的更多任務。 – MadProgrammer 2012-08-11 06:59:29

+0

@MadProgrammer它不保證被執行;有些情況下肯定不會,比如SYSKILL命令。文檔全面解釋了試探性的關閉掛鉤是如何的。 – Vulcan 2012-08-11 07:41:27

+0

@Vulcan你是對的,我應該添加「乾淨」/「正常」關機:P – MadProgrammer 2012-08-11 07:42:49

回答

1

將關閉掛鉤添加到Runtime實例時,會將其添加到線程列表中,以在乾淨終止JVM時啓動。

示例:使用shutdown hook確保從系統托盤中刪除java.awt.TrayIcon

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run() { 
     try { 
      if (SystemTray.isSupported()) { 
       SystemTray.getSystemTray().remove(yourTrayIcon); 
      } 
     } catch (Exception e) { 
      // failed to remove 
      e.printStackTrace(); 
     } 
    } 
}); 

更多內容可參見offical documentation