终止摇摆工作者

时间:2015-11-12 18:58:30

标签: java swing swingworker

大家好日子:

我的工作是为我们的客户创建自定义工具。我的雇主有一个我们销售的具有Java界面的旗舰产品。然后,我为客户构建工具(使用Java),使他们的生活更轻松。这些工具作为从Java接口内启动的插件运行。

我的问题是,在正常操作期间,我喜欢使用SwingWorkers来做事。在调试期间,我开始注意到(使用NetBeans调试器),即使给定的SwingWorker完成,该线程仍在运行。通常,这不会影响我,但我开始注意到,即使我正在处理的工具已经关闭,Swing Worker仍然在游泳池中闲逛。如果我关闭主应用程序,当然所有线程都将在JVM终止时死亡,但如果主应用程序仍在运行,我的SwingWorkers会挂起(即使设置了完成和取消标志)。

显然,这意味着我的Java应用程序正在使用主应用程序EDT(这很有意义),但它让我遇到了问题。如果我有一个用户在与主应用程序的单个会话期间多次运行我的工具,那么我将开始堆叠僵尸SwingWorkers,他们除了咀嚼内存和放大器之外什么也做不了。 CPU。

所以,我对蜂巢头脑的问题是,无论如何强制终止僵尸SwingWorker?或者,如果没有,有没有办法重新连接到Zombie SwingWorker,例如,如果我知道它的名字?

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为如果你使用一个线程池来保持线程(可能有一个空闲循环,导致它们显示为'running'),我认为这是预期的。

The docs说摇摆工作者只能执行一次,所以重新附加它们是不可能的。它们本身不是线程,而是在worker thread上执行。

您可以使用ExecutorService限制池中的线程数。 有关详细信息,请参阅this SO question