在调用halt之前,JVM允许关闭挂钩运行多长时间?

时间:2011-12-29 02:31:59

标签: java multithreading jvm shutdown-hook

previous question

跟进

如果您已阅读上一个问题,则另一个标题可能是:
我的守护程序应该多久检查一次它是否被中断?

2 个答案:

答案 0 :(得分:5)

当JVM发出退出信号时,它会运行一个关闭进程,启动所有关闭挂钩线程,然后等待它们完成。操作系统决定等待多长时间,这取决于用于启动过程终止的方法。您可以通过以下简单的测试程序自行尝试:

public static void main ( String[] args ) throws InterruptedException {
    Runtime.getRuntime ().addShutdownHook ( new Thread () {
        @Override
        public void run () {
            System.out.println ( "Shutdown hook" );
            while ( true ) { }
        }
    } );

    while ( true ) {
        System.out.println ( "Looping" );
        Thread.sleep ( 10000 );
    }
}

如果用ctrl + c通知进程,进程将启动关闭挂钩,但永远不会完成。如果你在关闭钩子中删除忙循环,你会看到它在钩子结束时终止。

答案 1 :(得分:2)

jvm执行shutdown。宽限时间基于操作系统和AFAIK,我们没有任何控制来配置它。