在 Java 中等待多个线程完成

2022-09-01 00:21:09

在我的程序执行过程中,启动了许多线程。线程的数量因用户定义的设置而异,但它们都使用不同的变量执行相同的方法。

在某些情况下,需要在执行过程中进行清理,其中一部分是停止所有线程,我不希望它们立即停止,我只是设置了一个它们检查的变量来终止它们。问题是,在线程停止之前,它可能长达1/2秒。但是,我需要确保在清理可以继续之前所有线程都已停止。清理是从另一个线程执行的,所以从技术上讲,我需要这个线程等待其他线程完成。

我想过几种方法来做到这一点,但它们似乎都过于复杂。我希望有一些方法可以等待一组线程完成。这样的事情存在吗?


答案 1

只需一个接一个地加入他们:

for (Thread thread : threads) {
  thread.join();
}

(您需要对 执行 某些操作,并且您可能希望提供超时值,以防出现问题,但这是基本思想...)InterruptedException


答案 2

如果您使用的是java 1.5或更高版本,则可以尝试CyclicBarrier。您可以将清理操作作为其构造函数参数传递,并在需要清理时调用所有线程。barrier.await()