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

jwa*_*yne 3 java multithreading terminate shutdown-hook

在网上找不到这个答案.当按下Ctrl + C时:

  • 当我们没有任何关闭钩子时,正在运行的线程会发生什么 - 他们每个都被InterruptedException击中?
  • 当我们有关闭钩子时,我知道关闭钩子以任意顺序在新线程中运行.但是现有的运行线程会发生什么?他们是否仍然受到InterruptedException的攻击?

谢谢!

lba*_*scs 5

经典着作"Java Concurrency in Practice"有关于JVM关闭的章节(7.4),您应该阅读它,但这里有一些相关的引用:

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

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

因此,线程不会被中断,但如果您愿意,可以从关闭钩子中明确地中断它们.