-
程序调用 System.exit() 退出
-
终端使用 Ctrl+C 中断程序
-
程序抛出异常导致程序退出,例如 OOM,数组越界等异常
-
系统事件,例如用户注销或关闭系统
-
使用 Kill pid 命令杀掉进程,注意使用 kill -9 pid 强制杀掉不会触发执行钩子
验证程序正常退出情况
package com.chenpi;
public class ShutdownHookDemo {
static {
Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println(“执行钩子方法…”)));
}
public static void main(String[] args) throws InterruptedException {
System.out.println(“程序开始启动…”);
Thread.sleep(2000);
System.out.println(“程序即将退出…”);
}
}
运行结果
程序开始启动…
程序即将退出…
执行钩子方法…
Process finished with exit code 0
验证程序调用 System.exit() 退出情况
package com.chenpi;
public class ShutdownHookDemo {
static {
Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println(“执行钩子方法…”)));
}
public static void main(String[] args) throws InterruptedException {
System.out.println(“程序开始启动…”);
Thread.sleep(2000);
System.exit(-1);
System.out.println(“程序即将退出…”);
}
}
运行结果
程序开始启动…
执行钩子方法…
Process finished with exit code -1
验证终端使用 Ctrl+C 中断程序,在命令行窗口中运行程序,然后使用 Ctrl+C 中断
package com.chenpi;
public class ShutdownHookDemo {
static {
Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println(“执行钩子方法…”)));
}
public static void main(String[] args) throws InterruptedException {
System.out.println(“程序开始启动…”);
Thread.sleep(2000);
System.out.println(“程序即将退出…”);
}
}
运行结果
D:\IdeaProjects\java-demo\java ShutdownHookDemo
程序开始启动…
执行钩子方法…
演示抛出异常导致程序异常退出