Вы можете использовать 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