java - JVM 在调用停止之前允许关闭 Hook 运行多长时间?

标签 java multithreading jvm shutdown-hook

previous question 跟进

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

最佳答案

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

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

关于java - JVM 在调用停止之前允许关闭 Hook 运行多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663425/

相关文章:

multithreading - 计算 900,000 个字符串之间的 Dice 系数的有效方法是什么?

java - Windows下JVM如何绘制按钮等控件?

c# - 为什么异常中断应用程序池?

java - 部署错误 - ServletWrapper 失败 : java. lang.NoSuchMethodError : javax. persistence.OneToMany.orphanRemoval()Z

java - 带有拦截器的 Spring Websocket 在连接关闭时执行 preSend

java - 当路径中的类时,Servlet 抛出 java.lang.ClassNotFoundException

C++ CodeLite 启用多线程?

Java GC日志分析

java - 有没有办法编译gcc来支持单一语言?

java - WebLogic 上的 CXF : JAXBException - property not supported