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

问题描述 投票:3回答:2

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

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

谢谢!

java multithreading terminate shutdown-hook
2个回答
5
投票

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

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

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

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


1
投票

IMO,Daemon线程将在关闭过程中继续运行,JVM将在退出应用程序时终止所有正在运行的线程。我不认为,运行线程将获得InterruptedException,因为JVM没有做任何额外的努力来停止运行线程。

http://www.tutorialspoint.com/java/lang/runtime_addshutdownhook.htm

© www.soinside.com 2019 - 2024. All rights reserved.