Java SwingWorker(线程)不';是否曾经死亡(到达“返回空值”后仍然活着)?

Java SwingWorker(线程)不';是否曾经死亡(到达“返回空值”后仍然活着)?,java,swingworker,Java,Swingworker,我已经实现了一个SwingWorker,它在while循环中执行一些操作 worker = new SwingWorker<Void, String>() { public Void doInBackground() { while(!this.isCancelled()) { //perform operations }

我已经实现了一个SwingWorker,它在while循环中执行一些操作

    worker = new SwingWorker<Void, String>()
    {
        public Void doInBackground()
        {
            while(!this.isCancelled())
            {
                //perform operations
            }
            return null;
        }


    };
    worker.execute();
worker=newswingworker()
{
公共无效doInBackground()
{
而(!this.isCancelled())
{
//执行操作
}
返回null;
}
};
worker.execute();
我想取消SwingWorker,从而保留对“worker”的引用并使用它的cancel方法

取消基本上可以正常工作(=达到“return null;”),但是相应的线程在取消后仍然处于活动状态(如eclipse中的调试窗口所示),并且占用了资源

因此,在停止执行while循环中的操作后,启动几个工作线程并取消它们可以使它们保持活动状态,即使不再使用它们,它们仍然会积累大量内存

我不希望线程被取消后仍然有效,我是不是错过了什么


感谢您的帮助

这就是它的工作原理
SwingWorker
在引擎盖下使用线程池-这意味着您不是通过创建
SwingWorker
直接创建线程。关键是要使这些线程“可重用”,因为创建线程的成本很高。因此,您有一堆“工作线程”,它们将为您执行一些任务

请注意,如果在第一个工作线程完成后执行另一个
SwingWorker
,并且工作线程(调试器中看到的工作线程)处于空闲状态,则该任务将由该线程执行,而不是创建新的工作线程


不要担心资源。工作线程池将关闭工作线程,如果它们在一段时间内不被使用。

事实上,在我的程序中,应该是空闲的线程(因为它们达到了“return null;”并且我想没有什么要做的?)不会接管另一个即将到来的swingworker任务的工作。即使我使用SwingWorker并重用它的“.execute()”方法也不行。实际上,一个新的线程被创建了。这就是我真正想要避免的!假设我有一个程序,用户按下一个按钮,然后一个swingworker不断地计算一些东西。按下另一个按钮后,Swingworker应停止计算并死亡,或至少保持空闲状态,并在下一次按下第一个按钮时接管进行……计算的任务。在我的程序中,按下第一个按钮和第二个按钮并重复此过程5次,它会创建5个不同的线程,占用大量内存,而不仅仅是重复使用一个swingworker线程5次,或者每次按下第二个按钮时将其杀死,然后在按下第一个按钮时创建一个新线程(开始计算)@freeprogrammer233也许你用错了SwingWorker,或者你认为你是在以前的工作人员完成后启动新的工作人员,但这不是真的,或者这只是执行的自由裁量权!如果您确实不满意SwingWorker的工作方式,您可以始终使用严格的、确定性的ExecutorService—您将向线程池提交
Runnbale
s,而不是执行新的
SwingWorker
。祝你好运