终止 Swing Worker
Terminating a Swing Worker
大家好:
我的工作是为我们的客户创建自定义工具。我的雇主有一款我们销售的旗舰产品,它有一个 Java 界面。然后,我为我们的客户构建工具(使用 Java),让他们的生活更轻松。这些工具 运行 作为插件从 Java 界面中启动。
我的问题是,在正常操作的时候,我喜欢用SwingWorkers来做事。在调试期间,我开始注意到(使用 NetBeans 调试器)即使给定的 SwingWorker 已完成,线程仍处于 运行ning 状态。通常,这不会让我担心,但后来我开始注意到,即使我正在使用的工具已关闭,Swing Worker 仍在池中闲逛。如果我关闭主应用程序,当然所有线程都会随着 JVM 终止而死掉,但如果主应用程序仍在 运行ning,我的 SwingWorker 就会挂起(即使设置了完成和取消标志)。
很明显,这意味着我的 Java 应用程序正在使用主要应用程序 EDT(这是有道理的),但这给我留下了一个问题。如果我有一个用户 运行 在与主要应用程序的单个会话期间多次使用我的工具,那么我将开始堆积僵尸 SwingWorkers,他们除了消耗一点内存之外什么都不做 & CPU.
那么,我对 hive mind 的问题是,是否有强制终止僵尸 SwingWorker 的方法?或者,如果没有,是否有任何方法可以重新连接到 Zombie SwingWorker,例如,如果我知道它的名字?
谢谢!
我认为如果您使用线程池,这是可以预料的,线程池会保持线程闲置(可能有一个空闲循环,导致它们显示为 'running')。
The docs say that swingworkers can only execute once, so re-attaching them isn't possible. They aren't threads themselves, but executed on a worker thread。
您可以使用 ExecutorService 来限制池中的线程数。
有关详细信息,请参阅 this SO question。
大家好:
我的工作是为我们的客户创建自定义工具。我的雇主有一款我们销售的旗舰产品,它有一个 Java 界面。然后,我为我们的客户构建工具(使用 Java),让他们的生活更轻松。这些工具 运行 作为插件从 Java 界面中启动。
我的问题是,在正常操作的时候,我喜欢用SwingWorkers来做事。在调试期间,我开始注意到(使用 NetBeans 调试器)即使给定的 SwingWorker 已完成,线程仍处于 运行ning 状态。通常,这不会让我担心,但后来我开始注意到,即使我正在使用的工具已关闭,Swing Worker 仍在池中闲逛。如果我关闭主应用程序,当然所有线程都会随着 JVM 终止而死掉,但如果主应用程序仍在 运行ning,我的 SwingWorker 就会挂起(即使设置了完成和取消标志)。
很明显,这意味着我的 Java 应用程序正在使用主要应用程序 EDT(这是有道理的),但这给我留下了一个问题。如果我有一个用户 运行 在与主要应用程序的单个会话期间多次使用我的工具,那么我将开始堆积僵尸 SwingWorkers,他们除了消耗一点内存之外什么都不做 & CPU.
那么,我对 hive mind 的问题是,是否有强制终止僵尸 SwingWorker 的方法?或者,如果没有,是否有任何方法可以重新连接到 Zombie SwingWorker,例如,如果我知道它的名字?
谢谢!
我认为如果您使用线程池,这是可以预料的,线程池会保持线程闲置(可能有一个空闲循环,导致它们显示为 'running')。
The docs say that swingworkers can only execute once, so re-attaching them isn't possible. They aren't threads themselves, but executed on a worker thread。
您可以使用 ExecutorService 来限制池中的线程数。 有关详细信息,请参阅 this SO question。