Java關閉掛鉤(shutdown hook)
當JVM正常或突然關閉時,關閉掛鉤可用於執行清理資源或保存狀態。 執行乾淨資源意味着關閉日誌文件,發送一些警報或其他內容。 因此,如果要在JVM關閉之前執行某些代碼,請使用關閉掛鉤(shutdown hook)。
JVM什麼時候關閉?
JVM在以下情況下關閉:
- 用戶在命令提示符下按
ctrl + c
- 調用
System.exit(int)
方法 - 用戶註銷計算機。
- 用戶關閉計算機等
addShutdownHook(Thread hook)方法Runtime
類的addShutdownHook()
方法用於向虛擬機註冊線程。
語法如下:
public void addShutdownHook(Thread hook){}
可以通過調用靜態工廠方法getRuntime()
來獲取Runtime
類的對象。 例如:
Runtime r = Runtime.getRuntime();
工廠方法
返回類實例的方法稱爲工廠方法。
Shutdown Hook的簡單示例
package com.yiibai;
class MyThread extends Thread{
public void run(){
System.out.println("shut down hook task completed..");
}
}
public class TestShutdown1{
public static void main(String[] args)throws Exception {
Runtime r=Runtime.getRuntime();
r.addShutdownHook(new MyThread());
System.out.println("Now main sleeping... press ctrl+c to exit");
try{Thread.sleep(3000);}catch (Exception e) {}
}
}
執行上面示例代碼,得到以下結果:
Now main sleeping... press ctrl+c to exit
shut down hook task completed..
Process finished with exit code 0
注意: 可以通過調用Runtime
類的halt(int)
方法來停止關閉序列。
使用匿名類的Shutdown Hook示例:
package com.yiibai;
public class TestShutdown2{
public static void main(String[] args)throws Exception {
Runtime r=Runtime.getRuntime();
r.addShutdownHook(new Thread(){
public void run(){
System.out.println("shut down hook task completed..");
}
}
);
System.out.println("Now main sleeping... press ctrl+c to exit");
try{Thread.sleep(3000);}catch (Exception e) {}
}
}
執行上面示例代碼,得到以下結果:
Now main sleeping... press ctrl+c to exit
shut down hook task completed..
Process finished with exit code 0