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() 是从多个地方调用的。但我希望这个单线程只在应用程序的一个地方执行。
解决方案
callables
您可以创建将返回 Futures的所有线程(Thread2、thread3....) 。
funcBackground
并且在所有线程都完成之前不要出来,如下所示。
while(!future2.isDone());
while(!future3.isDone());
while(!future4.isDone());
或者你可以使用
future2.get()
因为这也是阻塞的。
推荐阅读
- java - 石英调度程序是否删除触发器?
- android - 如何将图像保存到 Android Q 中的相机文件夹?
- c - 使用 C 套接字编程下载文件
- php - 无法到达 https://api.sendgrid.com/v3/mail/send 端点 (?)
- java - 如何删除 Java OutOfMemoryError
- python - 当尝试使用 django 模型访问 mysql 视图时,它会引发错误
- python - Flask-Admin 中的简单多对多问题
- python - 从python中的重叠矩形中找到唯一区域
- javascript - 如何将 dragstart 处理程序添加到 Fullcalendar Draggable
- spring - 即使没有附加文件,多个文件上传的大小也是 1