jvm关闭
关闭方式 正常关闭 最后一个普通线程(非守护线程)结束 调用了System.exit 发送SIGINT信号(相当于不带参数的kill命令)或者键入Ctrl-C 强制关闭 调用Runtime.halt 发送SIGKILL信号(kill -9 命令) 关闭钩子(Shutdown Hook) 钩子配置方法 通过下面的设置方法可看到,关闭钩子实际为线程 Runtime . getRuntime ( ) . addShutdownHook ( new Thread ( ( ) - > { } ) ) ; 触发调用Hook线程流程 正常关闭中,JVM首先调用所有已注册的关闭钩子。JVM并不能保证关闭钩子的调用顺序。在关闭应用程序线程时,如果有线程仍然在运行,那么这些线程接下来将与关闭进程并发进行。 当所有的关闭钩子都执行结束时,如果runFinalizersOnExit为true,那么JVM将运行终结器,然后再停止。JVM并不会停止或中断任何在关闭时仍然运行的应用程序线程。当JVM最终结束时,这些线程将被强行结束。 如果关闭钩子或终结器没有执行完成,那么正常关闭进程挂起并且JVM必须被强行关闭。 –《Java并发编程实战》 上述是书里面的介绍,下面跟着源码对照整个流程: 添加钩子 Runtime: public void addShutdownHook ( Thread hook ) {