美文网首页
Java的ShutdownHook

Java的ShutdownHook

作者: 野猪先生XYJ | 来源:发表于2020-10-20 17:27 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:Java的ShutdownHook

          本文链接:https://www.haomeiwen.com/subject/qpwdmktx.html