原文:https://blog.csdn.net/xqhadoop/article/details/62237437
通過我們的程序中運行完之后都會進行一些清理工作,比如關閉數據庫資源,同步等操作。這時我們的鈎子函數addShutdownHook有了用武之地。
1.鈎子程序執行時機:
當程序正常退出,系統調用 System.exit方法或虛擬機被關閉時才會執行添加的shutdownHook線程。其中shutdownHook是一個已初始化但並不有啟動的線程,當jvm關閉的時候,會執行系統中已經設置的所有通過方法addShutdownHook添加的鈎子,當系統執行完這些鈎子后,jvm才會關閉。所以可通過這些鈎子在jvm關閉的時候進行內存清理、資源回收等工作。
2.用法
Runtime.getRuntime().addShutdownHook(Thread thread)
這里我們需要將一個線程對象傳入,作為鈎子程序的實現代碼。本質上就是在jvm關閉時,執行一個線程。
3.實戰
public class Client{ public void test1(){ System.out.println("startting working......"); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { System.out.println("執行鈎子線程"); } }); System.out.println("program endding"); } } 執行結果: startting working...... program endding 執行鈎子線程
果然鈎子線程是在主程序執行完畢之后才開始執行。
