这个问题在这里已经有了答案:
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/