使用RunTime.getRunTime().addShutdownHook優雅關閉線程池


原文: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
執行鈎子線程
 

果然鈎子線程是在主程序執行完畢之后才開始執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM