首页 > 解决方案 > 如何让一个线程等到其他线程完成

问题描述

我有一个由线程调用的函数 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() 是从多个地方调用的。但我希望这个单线程只在应用程序的一个地方执行。

标签: androidmultithreadingrx-java2rx-android

解决方案


callables您可以创建将返回 Futures的所有线程(Thread2、thread3....) 。

funcBackground并且在所有线程都完成之前不要出来,如下所示。

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

或者你可以使用

future2.get()因为这也是阻塞的。


推荐阅读