java - 从 SwingWorker 执行 SwingWorker - 等待第一个停止

标签 java multithreading parallel-processing swingworker

我试图从另一个 SwingWorker (MainWorker) 执行一个 SwingWorker (SubWorker),然后我希望 MainWorker 等待 SubWorker 完成。同时,MainWorker 应该根据 SubWorker 的属性变化进行 self 更新。

public class MainWorker extends SwingWorker<Void,Void>
{
    public Void doInBackground()
    {
        SubWorker sw = new SubWorker();
        sw.execute();
        try {
            network.get(); // wait for completion
        } catch (Exception ex) {
        }
        return null;
    }
}

问题在于,直到 MainWorker 完成后才会调用 SubWorker 的 doInBackground 方法,而 MainWorker 正在等待 SubWorker 完成。

如何让 SubWorker 与 MainWorker 的 Activity 并行运行?

最佳答案

如果你只有一个子工作人员,我不确定有什么意义 - 为什么你不能只在 SW 主体中执行任务?

如果您有多个并行子任务,并且想要对它们进行分组并报告其进度,那么您实际上并不需要单独的 SwingWorkers - 只需启动线程或使用执行器来安排任务。如果要发布临时结果,请将阻塞队列传递给任务,任务将在其中推送更新。

主要(或者更确切地说是唯一)SwingWorker 将从该队列中获取项目并使用publish()/process() 方法更新GUI。当子任务完成工作时,它可以将特殊 token 推送到队列中(或为空)。这样您就可以跟踪未完成的子任务并决定何时终止循环。

或者,如果您有一堆独立的任务,您可以使用 CompletionService 并以类似的方式从软件更新状态。

关于java - 从 SwingWorker 执行 SwingWorker - 等待第一个停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996462/

相关文章:

multithreading - Mule:使用 doThreading ="false"负载下的线程数

java - 来自 HashSet 的并行流不会并行运行

c# - 如何优化此代码以创建 TIFF 文件和/或我应该考虑使用哪些替代库来提高性能?

java - Install4j8 对空搜索的处理顺序已更改

java - 线程 "main"java.lang.NoClassDefFoundError : io/kubernetes/client/openapi/ApiException 中的异常

java - Jsoup,在执行表单POST之前获取值

java - java 中的多线程编程、最佳实践和代码

java - 如何配置eclipse支持java?

PHP 在单独的线程中发送 POST 请求并忘记

java - 如果并发运行的进程中不存在文件,如何在不使用锁定的情况下安全地创建文件?