【发布时间】:2018-08-13 17:33:30
【问题描述】:
了解到JVM不会调用thread.interrupt()方法从https://stackoverflow.com/a/28731735/3034458停止线程
那么它是如何在这里真正起作用的呢? JVM 如何关闭/停止线程?
【问题讨论】:
-
我不相信它。它只是退出,让操作系统来做。
标签: java multithreading jvm application-shutdown
了解到JVM不会调用thread.interrupt()方法从https://stackoverflow.com/a/28731735/3034458停止线程
那么它是如何在这里真正起作用的呢? JVM 如何关闭/停止线程?
【问题讨论】:
标签: java multithreading jvm application-shutdown
JVM 本身不会调用中断,如果您调用 System::exit 或用户 ctrl-c 是应用程序,它只会停止线程冷态(线程只会在它们正在执行的任何操作中间停止——这个是不推荐 System::exit 的原因);
我的意思是粗暴地停止——就像你在两行代码之间并且第二行从未执行过,它甚至可能在函数调用的中间把你甩掉。
顺便说一句,有一种方法可以注册一个关闭挂钩来控制这种行为,我只是给你你应该期望的默认行为。
如果你所有的非守护线程和平退出,那么守护线程就会停止,就像你调用了 System::exit;
在正常情况下,您的应用应将关闭作为其用户的请求处理,手动停止所有线程并干净退出。这就是 Thread::interrupt 派上用场的地方。
【讨论】: