Java 运行多线程的JVM如何处理ctrl-c、w/和w/o关闭挂钩?
无法在网上找到此答案。按下Ctrl+C键时:Java 运行多线程的JVM如何处理ctrl-c、w/和w/o关闭挂钩?,java,multithreading,terminate,shutdown-hook,Java,Multithreading,Terminate,Shutdown Hook,无法在网上找到此答案。按下Ctrl+C键时: 当我们没有任何关机钩子时,正在运行的线程会发生什么情况?它们是否都会受到InterruptedException的攻击 当我们有关闭钩子时,我知道关闭钩子以任意顺序在新线程中运行。但是,现有正在运行的线程会发生什么情况呢?他们还是会被一个中断异常击中吗 谢谢 经典著作《实践中的Java并发》中有一章(7.4)是关于JVM关闭的,您应该读一下,但这里有一些相关的引用: 如果任何应用程序线程(守护进程或非守护进程)在关闭时仍在运行,则它们将继续与关闭
- 当我们没有任何关机钩子时,正在运行的线程会发生什么情况?它们是否都会受到InterruptedException的攻击
- 当我们有关闭钩子时,我知道关闭钩子以任意顺序在新线程中运行。但是,现有正在运行的线程会发生什么情况呢?他们还是会被一个中断异常击中吗
因此线程不会被中断,但如果您愿意,可以从shutdown hook显式中断它们。IMO,守护进程线程将在关机过程中继续运行,JVM将在稍后退出应用程序时杀死所有正在运行的线程。我不认为运行线程会得到
InterruptedException
,因为JVM不会做出任何额外的努力来停止运行线程
所有JVM的可能副本始终有多个线程。所谓“多线程”,我想你指的是你启动的额外线程。