【问题标题】:How long does the JVM allow shutdown hooks to run before calling halt?JVM 在调用停止之前允许关闭挂钩运行多长时间?
【发布时间】:2012-01-29 14:37:55
【问题描述】:

previous question跟进

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

【问题讨论】:

标签: java multithreading jvm shutdown-hook


【解决方案1】:

当 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 向进程发出信号,该进程将启动关闭挂钩,但永远不会完成。如果你删除了关闭钩子中的繁忙循环,你会看到它在钩子完成时终止。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 对不起,您能详细说明/改述一下吗?如果退出和停止之间没有“宽限时间”,那么关闭挂钩何时运行?
    • 对不起,@philwb 的回答对任何有类似问题的人都会更有用
    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 2021-05-21
    • 2013-06-21
    • 1970-01-01
    • 2017-07-17
    • 2015-04-01
    • 2020-09-21
    相关资源
    最近更新 更多