gpt4 book ai didi

Java同步: multiple CountDownLatch

转载 作者:行者123 更新时间:2023-12-02 05:38:51 26 4
gpt4 key购买 nike

以下情况:线程 A 启动线程 B,并应等待线程 B 完成其工作。线程 B 可以启动一个新的线程 C。如果是这样,线程 A 应该等待线程 B 和线程 C。

我可以使用两个 CountDownLatch 来实现它,但我想知道是否有更好的解决方案。我已经考虑过 CyclicBarrier 和 Phaser,但我认为它们不适合我的情况。

最佳答案

您可以使用Thread.join

final Thread c = new Thread(() -> {doSomethingInThreadC()});
c.start();
final Thread b = new Thread(() -> {
doSomethingInThreadB_I();
c.join(); // wait until thread C is completed
doSomethingInThreadB_II();
});
b.start();
Thread a = new Thread(() -> {
doSomethingInThreadA_I();
b.join(); // wait until thread B is completed
doSomethingInThreadA_II();
});
s.start();

但是,这种方法有一些限制 - 它会等到线程停止(直到某些操作完成)。如果线程 B 和 C 是池线程,那么它们将永远不会停止。

如果您正在寻找已完成的工作,请使用等待/通知

关于Java同步: multiple CountDownLatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56150779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com