咱們開發的系統有時候會有進程掛掉的狀況發生,換句話說就是咱們的虛擬機進程over了,此時若是咱們想要在進程關閉的時候執行某些如資源清理操做,那麼咱們能夠使用Java提供的鉤子Hook解決方方案。java
JDK 提供了addShutdownHook(Thread thread)
方法用於註冊一個鉤子,當Java進程關閉的時候,這些鉤子將會被執行,可是,在進程正常運行的過程當中,這些鉤子是不會啓動的。那麼這些鉤子在哪些狀況下會被觸發呢?大體有下面幾點:bash
System.exit(status)
方法ctrl+C
操做、系統關閉或者操做系統宕機下面我舉兩個例子演示下面兩種狀況:ide
RuntimeHookTest.java
spa
public class RuntimeHookTest {
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.err.println("The Java VM shutdown normally!");
}
}));
}
}
複製代碼
ctrl + c
退出程序``操作系統
public class RuntimeHookTest {
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.err.println("The Java VM has been interupted.");
}
}));
while (true) {
// 模擬程序一直運行
}
}
}
複製代碼