【问题标题】:How does JVM signal a long running thread to "stop" [duplicate]JVM如何向长时间运行的线程发出信号以“停止” [重复]
【发布时间】:2018-08-13 17:33:30
【问题描述】:

了解到JVM不会调用thread.interrupt()方法从https://stackoverflow.com/a/28731735/3034458停止线程

那么它是如何在这里真正起作用的呢? JVM 如何关闭/停止线程?

【问题讨论】:

  • 我不相信它。它只是退出,让操作系统来做。

标签: java multithreading jvm application-shutdown


【解决方案1】:

JVM 本身不会调用中断,如果您调用 System::exit 或用户 ctrl-c 是应用程序,它只会停止线程冷态(线程只会在它们正在执行的任何操作中间停止——这个是不推荐 System::exit 的原因);

我的意思是粗暴地停止——就像你在两行代码之间并且第二行从未执行过,它甚至可能在函数调用的中间把你甩掉。

顺便说一句,有一种方法可以注册一个关闭挂钩来控制这种行为,我只是给你你应该期望的默认行为。

如果你所有的非守护线程和平退出,那么守护线程就会停止,就像你调用了 System::exit;

在正常情况下,您的应用应将关闭作为其用户的请求处理,手动停止所有线程并干净退出。这就是 Thread::interrupt 派上用场的地方。

【讨论】:

  • just stop 是什么意思?我认为这就是他们感兴趣的,底层的 JVM 实现。
  • 更新了我的答案。
猜你喜欢
  • 2014-11-25
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多