【发布时间】:2020-09-02 00:08:43
【问题描述】:
这是(简化的)场景:
- 我有线程 A、B、C 并行运行。
- 一旦所有 3 个线程都到达执行的第 7 步,它们必须等待。 (每个线程会在不同的时间到达第 7 步,无法提前知道)。
- 然后线程 D 启动并运行到完成。
- 只有在 D 完成后,A、B 和 C 才能恢复并运行到完成。
什么是解决这个问题的好工具或设计?
到目前为止,我看到的并发和信号量示例似乎只处理 2 个线程,或者假设并行线程正在做类似的事情,但只是共享一个 var 或消息传递。我还没有找到任何适用于上述场景的东西。我会继续研究它,并将更新任何发现。
如果不需要让其他线程退出,CountDownLatch 可能会起作用。或者如果它可以反向工作 - 让 n 线程等待直到线程 D 退出。
我对并发相当陌生(大学课程不会在需要的时间附近提供它),所以请耐心等待。如果有类似问题的人偶然发现此线程,请在此处删除此链接:HowToDoInJava - Concurrency
【问题讨论】:
-
要让线程
A、B和C在第7 步等待,我可能会选择CyclicBarrier。然后,您可以在传递给CyclicBarrier的构造函数的Runnable中运行线程D,并在允许线程A、B和C继续之前等待它完成。 -
@JacobG。如果您将其添加为答案,我认为这将是最新的答案,因为它满足问题的所有要求。
标签: java multithreading concurrency