【发布时间】:2016-01-01 05:46:04
【问题描述】:
我有一个多线程的 Java 服务。这是一个发布者-订阅者应用程序。
有一个消息总线,并且有几个插件组件监听消息总线。来自插件的每个请求都由消息总线在单独的线程中处理。它作为 Windows 服务运行。
在停止方法中,目前我正在做的是调用System.exit(0)。在其他几个类似的问题中,有些人说这是一种不好的做法,而另一些人则声称这很好。就连 Sonarqube 也会抱怨。
那么停止所有这些线程的优雅方法是什么?我应该打电话给他们Thread.interrupt吗?
这些客户端持续监听消息总线,如果收到任何事件消息,它们就会处理它。
【问题讨论】:
-
如果您知道中断线程正在执行的任何操作都是安全的,
System.exit(0)很好,实际上更可取。如果一个线程可能正在做某事——比如写入一个文件——不能被安全地中断,那么你需要更加小心。 -
如果我的答案符合目的,您能否将我的答案标记为正确?
-
@AadityaGavandalkar 我可以使用 thread.interrupt 来中断主线程。但是如何关闭线程并退出?简而言之,我的停止方法实现是什么?我试过这个但没有用。 stackoverflow.com/questions/34589614/…
标签: java windows multithreading service thread-safety