【问题标题】:How does a JVM running multiple threads handle ctrl-c, w/ and w/o shutdown hooks?运行多个线程的 JVM 如何处理 ctrl-c、w/ 和 w/o 关闭挂钩?
【发布时间】:2018-03-06 07:43:56
【问题描述】:

无法在线找到此答案。当按下 Ctrl+C 时:

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

谢谢!

【问题讨论】:

标签: java multithreading terminate shutdown-hook


【解决方案1】:

经典书籍《Java Concurrency in Practice》有一章(7.4)是关于JVM关闭的,你应该读一下,但这里有一些相关的引述:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2014-05-18
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      相关资源
      最近更新 更多