【发布时间】:2015-02-26 18:59:06
【问题描述】:
我正在用 Java 编写一个程序,它使用 DDS 消息传递机制,在创建作家等时启动它自己的背景 threads。但是,如果在 main thread 中发生错误,我会使用以下代码抛出 exception。
throw new FooUncheckedException(writerTypes.get(i) + " is not a writer type");
主线程然后按预期终止。但是,我使用的DDS 库创建的后台线程 会继续运行,因此程序在技术上永远不会停止运行。我将如何优雅地关闭保持程序存活的后台线程?
【问题讨论】:
-
你需要设置一个通知,这样你也可以杀死这些线程。
-
@StackFlowed 代码到我使用的库创建的那些线程不是开源的,但是无法修改。
-
当你生成新线程时,你需要添加对通知类的引用,这会在需要时杀死它们。
-
一般来说,后台线程有一个活动循环,在其迭代的顶部检查它是否应该不再继续。这可能是一个由简单的布尔 API 设置的标志,也可能是它的工作队列是空的,或者......所以在查看
kill类型方法之前,看看那个特定的库是否可以提供一些东西。 -
@BaseZen 从您的建议的第一部分至今,我没有看到任何东西,但我仍在尽可能深入地挖掘 API 以尝试找到一些东西。但似乎我可能不得不杀死它们,我知道要不惜一切代价避免这种情况,因为突然停止线程可能会发生其他副作用。
标签: java multithreading data-distribution-service