SwingWorker(线程)永远不会死(达到 "return null;" 后仍然存在)?
SwingWorker (Thread) doesn't ever die (still lives after reaching "return null;")?
我实现了一个在 while 循环中执行一些操作的 SwingWorker。
worker = new SwingWorker<Void, String>()
{
public Void doInBackground()
{
while(!this.isCancelled())
{
//perform operations
}
return null;
}
};
worker.execute();
我想取消 SwingWorker,因此保留对 "worker" 的引用并使用它的取消方法。
取消基本上工作正常(= "return null;" 已达到),但相应的线程在取消后似乎仍然存在(如我在 eclipse 中的 debug-window 所示)并且也需要上资源。
所以启动几个工作线程并取消它们使它们在停止执行 while 循环中的操作后保持活动状态并且它们仍然积累大量内存,即使它们不再被使用。
我不希望线程在被取消后仍然存在,我是不是错过了什么?
感谢任何帮助!
它应该是这样工作的。 SwingWorker
在底层使用线程池——这意味着您不是通过创建 SwingWorker
直接创建线程。重点是使这些线程 "reusable" 因为线程创建很昂贵。所以你有一堆 "worker threads" 可以为你执行一些任务。
请注意,如果您在第一个完成并且工作线程(您在调试器中看到的那个)空闲后执行另一个 SwingWorker
,任务将由该线程执行,而不是创建新线程.
不用担心资源。如果一段时间不使用,工作线程池将关闭工作线程。
我实现了一个在 while 循环中执行一些操作的 SwingWorker。
worker = new SwingWorker<Void, String>()
{
public Void doInBackground()
{
while(!this.isCancelled())
{
//perform operations
}
return null;
}
};
worker.execute();
我想取消 SwingWorker,因此保留对 "worker" 的引用并使用它的取消方法。
取消基本上工作正常(= "return null;" 已达到),但相应的线程在取消后似乎仍然存在(如我在 eclipse 中的 debug-window 所示)并且也需要上资源。
所以启动几个工作线程并取消它们使它们在停止执行 while 循环中的操作后保持活动状态并且它们仍然积累大量内存,即使它们不再被使用。
我不希望线程在被取消后仍然存在,我是不是错过了什么?
感谢任何帮助!
它应该是这样工作的。 SwingWorker
在底层使用线程池——这意味着您不是通过创建 SwingWorker
直接创建线程。重点是使这些线程 "reusable" 因为线程创建很昂贵。所以你有一堆 "worker threads" 可以为你执行一些任务。
请注意,如果您在第一个完成并且工作线程(您在调试器中看到的那个)空闲后执行另一个 SwingWorker
,任务将由该线程执行,而不是创建新线程.
不用担心资源。如果一段时间不使用,工作线程池将关闭工作线程。