JDK提供Runtime.getRuntime().addShutdownHook(Thread hook)方法注册JVM关闭钩子(可以参考《JAVA并发编程实践》的7.4.1 关闭钩子章节),进行最终资源清理等处理, 主要应用场景:
1)程序正常退出@b@2)使用System.exit()@b@3)终端使用Ctrl+C触发的中断@b@4)系统关闭@b@5)OutOfMemory宕机@b@6)使用Kill pid命令干掉进程(注:在使用kill -9 pid时,是不会被调用的)
代码示例
package com.xwood.demo.thread; @b@ @b@public class ShutdownHookTest {@b@@b@ public static void main(String[] args) throws Exception{@b@@b@ Thread thread1 = new Thread() {@b@ public void run() {@b@ System.out.println("thread1...");@b@ }@b@ };@b@@b@@b@ Thread thread2 = new Thread() {@b@ public void run() {@b@ System.out.println("thread2...");@b@ }@b@ };@b@@b@ Thread shutdownThread = new Thread() {@b@ public void run() {@b@ System.out.println("shutdownThread...");@b@ }@b@ };@b@@b@ // jvm关闭的时候先执行该线程钩子@b@ Runtime.getRuntime().addShutdownHook(shutdownThread);@b@ thread1.start();@b@ thread2.start();@b@@b@ Thread.sleep(10000);@b@ System.out.println("####");@b@ } @b@@b@}
控制台运行结果
thread1...@b@thread2...@b@####@b@shutdownThread...@b@@b@Process finished with exit code 0