Java System Hook( Java 運行鉤子)

咱們開發的系統有時候會有進程掛掉的狀況發生,換句話說就是咱們的虛擬機進程over了,此時若是咱們想要在進程關閉的時候執行某些如資源清理操做,那麼咱們能夠使用Java提供的鉤子Hook解決方方案。java

JDK 提供了addShutdownHook(Thread thread)方法用於註冊一個鉤子,當Java進程關閉的時候,這些鉤子將會被執行,可是,在進程正常運行的過程當中,這些鉤子是不會啓動的。那麼這些鉤子在哪些狀況下會被觸發呢?大體有下面幾點:bash

  • 一、程序正常運行結束
  • 二、關閉虛擬機進程,如程序中調用了System.exit(status)方法
  • 三、用戶中斷了虛擬機進程,如執行了ctrl+C操做、系統關閉或者操做系統宕機

下面我舉兩個例子演示下面兩種狀況:ide

  • 一、程序正常退出

RuntimeHookTest.javaspa

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) {
        // 模擬程序一直運行
    	}
    }
}
複製代碼

相關文章
相關標籤/搜索