Java的ShutdownHook

JDK提供了Java.Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在一下几种场景中被调用:

  • 程序正常退出
  • 使用System.exit()
  • 终端使用Ctrl+C触发的中断
  • 系统关闭
  • OutOfMemory宕机
  • 使用Kill pid命令干掉进程(注:在使用kill -9 pid时,是不会被调用的)

这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁、关闭连接等操作。

public static void main(String[] args) {
        //Shutdown hook demo
        Thread thread1 = new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                System.out.println("thread1...");
            }
        };
        System.out.println("main开始");
        try {
            thread1.start();
            thread1.join();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        System.out.println("main即将结束");
        //定义shutdownhook
        Thread shutdownThread = new Thread() {
            @Override
            public void run() {
                System.out.println("Shutdown hook");
            }
        };
        Runtime.getRuntime().addShutdownHook(shutdownThread); //注册钩子
        System.out.println("main结束");
    }

输出结果

main开始
thread1...
main即将结束
main结束
Shutdown hook
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容