- Java.lang 包类
- Java.lang - 首页
- Java.lang - Boolean
- Java.lang - Byte
- Java.lang - Character
- Java.lang - Character.Subset
- Java.lang - Character.UnicodeBlock
- Java.lang - Class
- Java.lang - ClassLoader
- Java.lang - Compiler
- Java.lang - Double
- Java.lang - Enum
- Java.lang - Float
- Java.lang - InheritableThreadLocal
- Java.lang - Integer
- Java.lang - Long
- Java.lang - Math
- Java.lang - Number
- Java.lang - Object
- Java.lang - Package
- Java.lang - Process
- Java.lang - ProcessBuilder
- Java.lang - Runtime
- Java.lang - RuntimePermission
- Java.lang - SecurityManager
- Java.lang - Short
- Java.lang - StackTraceElement
- Java.lang - StrictMath
- Java.lang - String
- Java.lang - StringBuffer
- Java.lang - StringBuilder
- Java.lang - System
- Java.lang - Thread
- Java.lang - ThreadGroup
- Java.lang - ThreadLocal
- Java.lang - Throwable
- Java.lang - Void
- Java.lang 包其他内容
- Java.lang - 接口
- Java.lang - 错误
- Java.lang - 异常
- Java.lang 包有用资源
- Java.lang - 有用资源
- Java.lang - 讨论
Java Runtime addShutdownHook(Thread hook) 方法
描述
Java Runtime addShutdownHook(Thread hook) 方法注册一个新的虚拟机关闭钩子。Java 虚拟机响应两种事件而关闭:
程序正常退出,当最后一个非守护线程退出或调用 exit(等效于 System.exit)方法时,或者
虚拟机响应用户中断(例如,键入 ^C)或系统范围事件(例如,用户注销或系统关闭)而终止。
关闭钩子只是一个已初始化但未启动的线程。当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭钩子并让它们并发运行。当所有钩子都完成后,它将运行所有未调用的终结器(如果已启用退出时的终结)。最后,虚拟机将停止。请注意,守护线程将在关闭序列期间继续运行,如果关闭是由调用 exit 方法发起的,则非守护线程也将继续运行。
声明
以下是 java.lang.Runtime.addShutdownHook() 方法的声明
public void addShutdownHook(Thread hook)
参数
hook − 已初始化但未启动的 Thread 对象
返回值
此方法不返回值。
异常
IllegalArgumentException − 如果指定的钩子已注册,或者如果可以确定钩子已在运行或已运行
IllegalStateException − 如果虚拟机已处于关闭过程中
SecurityException − 如果存在安全管理器并且它拒绝 RuntimePermission("shutdownHooks")
示例:向 Thread 对象添加关闭钩子
以下示例显示了 Java Runtime addShutdownHook() 方法的用法。在此程序中,我们创建了一个静态内部类 Message,它扩展了 Thread。在 main 方法中,我们使用 addShutdownHook() 方法使用新的 Message 对象注册了一个关闭钩子。然后我们让系统休眠 3 秒,然后打印一条关闭消息。由于关闭钩子已与 Message 对象注册,因此当程序退出时将调用其 run 方法。
package com.tutorialspoint; 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.