Java执行多个线程并等待完成

标签 java multithreading concurrency java-threads

这个问题在这里已经有了答案:





How to start two process at the same time and then wait both completed?

(3 个回答)


上个月关闭。




我正在编写一个小程序,它应该更新服务器上的固件。我目前这样做的方法是通过 ProcessBuilder 发出命令,执行它并使用 exitCode = process.waitFor();等待直到命令完成。
其中一些固件更新可能需要几分钟时间,因此在设置多个系统时,如果单独进行这些固件更新可能需要几个小时。
我尝试在使用 CyclicBarrier 的同时创建线程,以确保同时启动所有固件更新。 (见:Stackoverflow-Question: How to start two threads at “exactly” the same time
然而,我发现的问题是,在启动所有线程后,我的程序将照常继续 - 在这种情况下,将重新启动所有系统,如果它们仍在更新固件的过程中,这可能会破坏它们。
在继续之前,我如何确保所有固件更新都已完成?我曾考虑让程序 hibernate 10-15 分钟,但想要更可靠的方法。

最佳答案

您可以使用 CountDownLatch除了屏障。通过CountDownLatch对于每个线程,一旦固件更新完成,只需在闩锁上调用倒计时即可。在您的主线程中,启动所有线程后,您可以调用 latch.await 等待。它会一直哀号直到所有其他线程完成。您可能会找到 sample here .
您甚至可以使用 CountDownLatch在您的情况下,以 1 作为发令枪的计数,这排除了使用 CyclicBarrier 的可能性。 .

关于Java执行多个线程并等待完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68996692/

相关文章:

java - 联合测试 : what is Failure?

java - 使用 Play 从 java 类访问 application.conf 属性! 2.0

java - 使用 ExecutorService 产生的结果。哪一个类?

后台 worker 中的 C# ProgressBar 数据绑定(bind)

java - 无法构建 Spring Tool Suite 快速入门

Java - LocalDate 比较超出范围但输出不正确

c - 寻找轻量级跨平台C线程库

java - 一个简单的多线程闹钟

concurrency - 为什么并发编程的书总是忽略数据并行?

multithreading - 在 go 中一次处理许多 GET 请求