等待多个线程在 Java 中完成

新手上路,请多包涵

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

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

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

原文由 A Jackson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 334
2 个回答

只需将它们一一加入即可:

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

(你需要用 InterruptedException 做一些事情,你可能想提供一个超时以防出现问题,但这是基本的想法……)

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

原文由 Tadeusz Kopec for Ukraine 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题