Как заставить поток ждать, пока другие потоки не будут завершены - PullRequest
0 голосов
/ 29 января 2019

У меня есть функция funcA (), которая вызывается потоком.Эта функция funcA () вызывает несколько функций, которые выполняются в других параллельных потоках.Я хочу, чтобы мой первый поток, вызвавший funcA (), дождался, пока все эти потоки не завершили свою работу, а затем перешел к следующей строке для дальнейшего выполнения.

например, Thread1 -> funcA ();

funcA()
{
    funcBackground();   

    //Once the above method's threads have completed their work
    doSomeOtherWork(); 
}

funcBackground()
{
    Thread2 -> doJob1();
    Thread3 -> doJob2();
    Thread4 -> doJob3();
    .
    .
    .
//All the above threads have completed their work
}

Как мне этого добиться?Я знаю, что вы можете подумать, если я хочу запустить все в одном потоке, то почему я использую несколько потоков в funcBackground ().Дело в том, что мой funcBackground () вызывается из нескольких мест.Но я хочу, чтобы выполнение этого одного потока выполнялось только в одном месте приложения.

1 Ответ

0 голосов
/ 29 января 2019

Вы можете создать все потоки (Thread2, thread3 ....), реализующие callables, которые будут возвращать Futures.

и не выходите из funcBackground, пока все потоки не будут завершены, как показано ниже.

    while(!future2.isDone());
    while(!future3.isDone());
    while(!future4.isDone());

Или вы можете использовать

future2.get(), как этотакже блокировка.

...