java.lang.Runtime.addShutdownHook()方法實例
java.lang.Runtime.addShutdownHook(Thread hook) 方法註冊一個新的虛擬機關閉掛鉤。 Java虛擬機的關閉響應於兩種事件:
該程序正常退出,當最後一個非守護線程退出或退出(等同於System.exit)方法被調用時,或
關閉鉤子是一個簡單的初始化但尚未啓動的線程。
當虛擬機開始其關閉序列將啓動所有已註冊的關閉鉤子在一些未指定的順序,讓他們同時運行。當所有的鉤子都做完了會然後運行所有未調用的終結,如果最後確定的按出口已啓用。最後,虛擬機將暫停。需要注意的是守護線程將繼續關閉序列期間運行,將作爲非守護線程,如果關機是通過調用exit方法啓動。
聲明
以下是**java.lang.Runtime.addShutdownHook()**方法的聲明
public void addShutdownHook(Thread hook)
參數
返回值
這個方法沒有返回值。
異常
例子
下面的例子顯示lang.Runtime.addShutdownHook()方法的使用。
package com.yiibai; public class RuntimeDemo { // a class that extends thread that is to be called when program is exiting static class Message extends Thread { public void run() { System.out.println("Bye."); } } public static void main(String[] args) { try { // register Message as shutdown hook Runtime.getRuntime().addShutdownHook(new Message()); // print the state of the program System.out.println("Program is starting..."); // cause thread to sleep for 3 seconds System.out.println("Waiting for 3 seconds..."); Thread.sleep(3000); // print that the program is closing System.out.println("Program is closing..."); } catch (Exception e) { e.printStackTrace(); } } }
讓我們編譯並運行上述程序,這將產生以下結果:
Program is starting... Waiting for 3 seconds... Program is closing... Bye.
虛擬機終止響應用戶中斷,如打字^ C或系統範圍的事件,比如用戶註銷或關閉系統。
- hook -- 已初始化但尚未啓動的線程對象
* IllegalArgumentException -- 如果指定的鉤已被註冊,或如果它可以被判定爲鉤已經運行或已經運行
* IllegalStateException -- 如果虛擬機已處於關閉的過程中
* SecurityException -- 如果安全管理器存在並且它拒絕RuntimePermission(「shutdownHooks」)