gpt4 book ai didi

java - 终止 Swing Worker

转载 作者:行者123 更新时间:2023-11-30 08:44:43 25 4
gpt4 key购买 nike

大家好:

我的工作是为我们的客户创建定制工具。我的雇主有一款我们销售的具有 Java 界面的旗舰产品。然后,我为我们的客户构建工具(使用 Java),让他们的生活更轻松。这些工具作为从 Java 界面中启动的插件运行。

我的问题是,在正常操作期间,我喜欢使用 SwingWorkers 来做事。在调试期间,我开始注意到(使用 NetBeans 调试器)即使给定的 SwingWorker 已完成,线程仍在运行。通常,这不会让我担心,但后来我开始注意到,即使我正在使用的工具已关闭,Swing Worker 仍在池中闲逛。如果我关闭主应用程序,当然所有线程都会随着 JVM 终止而死掉,但如果主应用程序仍在运行,我的 SwingWorker 就会挂起(即使设置了完成和取消标志)。

很明显,这意味着我的 Java 应用程序正在使用主要应用程序 EDT(这是有道理的),但这给我留下了一个问题。如果我有一个用户在与主应用程序的单个 session 期间多次运行我的工具,那么我将开始堆积僵尸 SwingWorkers,它们除了占用内存和 CPU 之外什么都不做。

那么,我对 hive 思维的问题是,是否有强制终止僵尸 SwingWorker 的方法?或者,如果没有,是否有任何方法可以重新附加到 Zombie SwingWorker,例如,如果我知道它的名字?

谢谢!

最佳答案

我认为如果您使用线程池,这是意料之中的事情,线程池会保持线程闲置(可能有一个空闲循环,导致它们显示为“正在运行”)。

The docs说 swingworkers 只能执行一次,所以重新附加它们是不可能的。它们本身不是线程,而是在 worker thread 上执行的.

您可以使用 ExecutorService 来限制线程池中的线程数。参见 this SO question了解更多详情。

关于java - 终止 Swing Worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33679170/

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