如何使线程等待其他线程完成

时间:2019-01-29 12:22:58

标签: android multithreading rx-java2 rx-android

我有一个函数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 :(得分:0)

您可以创建实现callables的所有线程(Thread2,thread3 ....),这些线程将返回Futures。

并且直到所有线程都如下所示完成后,才能退出funcBackground

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

或者您可以使用

future2.get(),因为这也会阻止。