SwingWorker(Thread)永远不会死(在达到“return null”后仍然存在)?

时间:2016-05-31 20:48:00

标签: java swingworker

我已经实现了一个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循环中的操作后,启动多个工作线程并取消它们会使它们保持活动状态,即使它们不再使用,它​​们仍会积累大量内存。

我不希望线程在被取消后仍然活着,我错过了什么吗?

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

这是应该如何工作的。 SwingWorker使用线程池 - 这意味着您不是通过创建SwingWorker直接创建线程。重点是,使这些线程“可重用”,因为线程创建很昂贵。所以你有很多“工作线程”会为你执行一些任务。

请注意,如果在第一个完成后执行另一个SwingWorker并且工作线程(您在调试器中看到的那个)空闲,则该任务将由创建新线程的线程执行。< / p>

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