2013-11-14 24 views
2

想知道如何以編程方式從關閉鉤子訪問System.exit中的退出狀態?不同類型的關機需要在應用程序中導致不同的邏輯(關機非常「困難」),但有幾種方法我正在考慮這樣做,但這將是最簡單的。以編程方式從關閉鉤子訪問退出狀態

+0

如果你真的設置爲從鉤子訪問它,請檢查:http://stackoverflow.com/questions/1486679/determine-exit-status-within-the-java-shutdown-hook-thread?rq = 1 – Floegipoky

回答

2

查看我鏈接的問題,如果你真的設置了這個。但是,您不應該需要從鉤子訪問代碼。設置退出代碼時,您確切知道需要哪種「類型」關機。可以動態指定當時的關閉行爲。

startShutdown(int code) { 
    System.exit(code); 
} 

你可以做這些方針的東西:而不是在開始執行時註冊您的關閉掛鉤(S),然後做這個的

private Map<Integer, Thread> shutdownHandlerLocator; // initialize this on startup with all of the exit codes and their corresponding handlers 

startShutdownTypeA(int code) { 
    Runtime.getRuntime().addShutdownHook(shutdownHandlerLocator.get(code)); 
    System.exit(code); 
} 

這種基本方法可以被修改,以適應您項目的設計需求以及您的拆解邏輯的複雜性。有機會申請繼承。您也可以創建一些非常小的特定掛鉤,並根據您需要的行爲(建議)單獨註冊它們。可能性是無限的,不知道你想要做什麼的確切細節,很難推薦更具體的設計。

現在這一切都很好,但以下是事情 - 拆卸應該儘可能少,因爲執行關機掛鉤時執行處於相當脆弱的狀態。如果您發現需要非常複雜的行爲,則可能需要重新審視整體設計。

我也應該提到,在上面的方式中使用線程有一些內存管理含義。