位置:首頁 > Java技術 > java.lang > java.lang.Runtime.addShutdownHook()方法實例

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”)