gpt4 book ai didi

java - SwingWorker(线程)永远不会死(到达 "return null;"后仍然存在)?

转载 作者:行者123 更新时间:2023-11-30 02:54:52 27 4
gpt4 key购买 nike

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

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


};
worker.execute();

我想取消 SwingWorker,从而保留对“worker”的引用并使用它的取消方法。

取消基本上工作得很好(=“return null;”已达到),但取消后相应的线程似乎仍然存在(如我在 eclipse 中的调试窗口所示)并且还占用资源。

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

我不希望线程在取消后仍处于 Activity 状态,我是否在这里错过了一些东西?

感谢任何帮助!

最佳答案

这就是它应该如何工作的。 SwingWorker 在底层使用线程池 - 这意味着您不是通过创建 SwingWorker 直接创建线程。重点是使这些线程“可重用”,因为创建线程的成本很高。所以你有一堆“工作线程”将为你执行一些任务。

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

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

关于java - SwingWorker(线程)永远不会死(到达 "return null;"后仍然存在)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37555344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com