以下情况:线程A启动线程B,并应等待线程B完成其工作。线程B可以启动一个新的线程C。如果是这种情况,线程A应该等待线程B和线程C。
我可以使用两个CountDownLatch来实现它,但我想知道是否有更好的解决方案。我看过CyclicBarrier和Phaser,但我认为他们不适合我的情况。
发布于 2019-05-15 22:14:30
您可以使用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是池化线程,那么这些线程永远不会停止。
如果您正在寻找完成的工作,那么使用wait/notify
https://stackoverflow.com/questions/56150779
复制相似问题