Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行多线程的JVM如何处理ctrl-c、w/和w/o关闭挂钩?_Java_Multithreading_Terminate_Shutdown Hook - Fatal编程技术网

Java 运行多线程的JVM如何处理ctrl-c、w/和w/o关闭挂钩?

Java 运行多线程的JVM如何处理ctrl-c、w/和w/o关闭挂钩?,java,multithreading,terminate,shutdown-hook,Java,Multithreading,Terminate,Shutdown Hook,无法在网上找到此答案。按下Ctrl+C键时: 当我们没有任何关机钩子时,正在运行的线程会发生什么情况?它们是否都会受到InterruptedException的攻击 当我们有关闭钩子时,我知道关闭钩子以任意顺序在新线程中运行。但是,现有正在运行的线程会发生什么情况呢?他们还是会被一个中断异常击中吗 谢谢 经典著作《实践中的Java并发》中有一章(7.4)是关于JVM关闭的,您应该读一下,但这里有一些相关的引用: 如果任何应用程序线程(守护进程或非守护进程)在关闭时仍在运行,则它们将继续与关闭

无法在网上找到此答案。按下Ctrl+C键时:

  • 当我们没有任何关机钩子时,正在运行的线程会发生什么情况?它们是否都会受到InterruptedException的攻击
  • 当我们有关闭钩子时,我知道关闭钩子以任意顺序在新线程中运行。但是,现有正在运行的线程会发生什么情况呢?他们还是会被一个中断异常击中吗
谢谢

经典著作《实践中的Java并发》中有一章(7.4)是关于JVM关闭的,您应该读一下,但这里有一些相关的引用:

如果任何应用程序线程(守护进程或非守护进程)在关闭时仍在运行,则它们将继续与关闭进程并发运行

JVM不会试图停止或中断在关机时仍在运行的任何应用程序线程;当JVM最终停止时,它们会突然终止


因此线程不会被中断,但如果您愿意,可以从shutdown hook显式中断它们。

IMO,守护进程线程将在关机过程中继续运行,JVM将在稍后退出应用程序时杀死所有正在运行的线程。我不认为运行线程会得到
InterruptedException
,因为JVM不会做出任何额外的努力来停止运行线程


所有JVM的可能副本始终有多个线程。所谓“多线程”,我想你指的是你启动的额外线程。