位置:首页 > 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”)