我已经实现了一个SwingWorker在while循环中执行某些操作。
worker = new SwingWorker<Void, String>()
{
public Void doInBackground()
{
while(!this.isCancelled())
{
//perform operations
}
return null;
}
};
worker.execute();
我想取消SwingWorker,从而保留对“worker”的引用并使用它的cancel方法。
取消基本上工作正常(=“返回null;”已达到),但相应的线程在取消后仍然存在(如eclipse中的调试窗口所示)并且还占用资源。
因此,在停止执行while循环中的操作后,启动多个工作线程并取消它们会使它们保持活动状态,即使它们不再使用,它们仍会积累大量内存。
我不希望线程在被取消后仍然活着,我错过了什么吗?
任何帮助表示赞赏!
答案 0 :(得分:2)
这是应该如何工作的。 SwingWorker
使用线程池 - 这意味着您不是通过创建SwingWorker
直接创建线程。重点是,使这些线程“可重用”,因为线程创建很昂贵。所以你有很多“工作线程”会为你执行一些任务。
请注意,如果在第一个完成后执行另一个SwingWorker
并且工作线程(您在调试器中看到的那个)空闲,则该任务将由创建新线程的线程执行。< / p>
不要担心资源。如果工作线程池将在一段时间内不使用,它将关闭工作线程。