我想知道如果JVM崩溃,是否保证在场景中执行shutdownhook。
答案 0 :(得分:11)
不。来自the docs:
在极少数情况下,虚拟机可能会中止,即停止运行而不会干净地关闭。当虚拟机在外部终止时会发生这种情况,例如Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用。如果本机方法因例如破坏内部数据结构或尝试访问不存在的内存而出错,则虚拟机也可能中止。 如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。
(强调我的)
答案 1 :(得分:1)
shutdownhook为JVM开始关闭之前需要完成的任何任务创建一个线程,如果机器本身关闭了shutdownhook创建的线程, 将永远不会获得执行的CPU周期,我认为shutdownhook将不会执行...