首页

程序出错退出终极处理办法-线程关闭钩子addShutdownHook

标签:ShutdownHook,钩子     发布时间:2022-12-04   

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
  • ◆ 相关内容