【发布时间】:2017-08-04 16:00:36
【问题描述】:
我正在使用 GUI 来调用摇摆工作线程。
在他们完成并执行方法done() 后,我正在打印Thread.activeCount()。我得到一个数字,表明线程仍然处于活动状态。
完成后我需要以某种方式收集它们吗?
【问题讨论】:
-
收集它们是什么意思?垃圾收集?
标签: java multithreading swing swingworker
我正在使用 GUI 来调用摇摆工作线程。
在他们完成并执行方法done() 后,我正在打印Thread.activeCount()。我得到一个数字,表明线程仍然处于活动状态。
完成后我需要以某种方式收集它们吗?
【问题讨论】:
标签: java multithreading swing swingworker
您不能手动销毁由SwingWorker 实例创建的线程。这些线程在未公开的ThreadPoolExecutor 中运行。
public final void execute() {
getWorkersExecutorService().execute(this);
}
private static synchronized ExecutorService getWorkersExecutorService()
您必须等待超时。生成的每个线程都有 10 分钟的超时时间。
executorService = new ThreadPoolExecutor(MAX_WORKER_THREADS, MAX_WORKER_THREADS, 10L, TimeUnit.MINUTES, new LinkedBlockingQueue<Runnable>(), threadFactory);
这些线程是守护进程,因此如果它们是程序中的最后一个线程,程序仍会关闭。
【讨论】:
boolean running 工人设置为真/假,然后公开一个 boolean isRunning() 方法,以便其他人可以确定它是否已完成。或者您可以使用callback,当任务完成时done() 会调用它。举个具体的例子,我可以用例子给出具体的答案。
isDone()。