Java提供註冊鉤子線程,在JVM進程關閉以前,會自動執行這個鉤子線程。ide
運用這個技巧,能夠再JVM關閉以前,釋放一些系統資源。函數
這個功能利用的是Runtime類來實現。spa
public class Hook { public static void main(String args[]){ System.out.println("程序開始執行"); try{ Thread.sleep(100); } catch(Exception ex){ } Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { System.out.println("執行鉤子函數 -- " + 1); } }); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { System.out.println("執行鉤子函數 -- " + 2); } }); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { System.out.println("執行鉤子函數 -- " + 3); } }); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { System.out.println("執行鉤子函數 -- " + 4); } }); System.out.println("程序執行完畢,退出main"); } }
輸出線程
能夠看到,執行順序和註冊順序是不一致的。通常也不會 註冊多個鉤子函數。code
程序開始執行 程序執行完畢,退出main 執行鉤子函數 -- 2 執行鉤子函數 -- 3 執行鉤子函數 -- 4 執行鉤子函數 -- 1
同時,還提供了移除鉤子函數的功能blog
public boolean removeShutdownHook(Thread hook)