可能的重复:
当 Shutdown Hooks 坏掉时
我想知道如果JVM崩溃,是否可以保证在场景中执行shutdownhook。
没有。从文档:
在极少数情况下,虚拟机可能会中止,即在没有完全关闭的情况下停止运行。当虚拟机在外部终止时会发生这种情况,例如在 Unix 上使用 SIGKILL 信号或在 Microsoft Windows 上使用 TerminateProcess 调用。如果本地方法出错,例如破坏内部数据结构或尝试访问不存在的内存,虚拟机也可能中止。如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。
(强调我的)
但是,shutdownhook 会为 JVM 开始关闭之前需要完成的任何任务创建一个线程,如果机器本身关闭,则由 shutdownhook 创建的线程
将永远不会获得 CPU 周期来执行,我认为这里的shutdownhook 不会被执行.. .