我正在寻找最简单、最直接的方法来实现以下内容:
- main 启动并启动 3 个线程
- 所有 3 个任务都处理并以结果值结束(我需要以某种方式返回它?)
- main 在每个线程上等待(.join?),以确保它们 3 个都完成了任务
- main 以某种方式从每个线程获取值(3 个值)
然后剩下的就很简单了,处理3个结果然后终止...
现在,我一直在阅读并发现了多种想法,例如:
- 使用 Future,但这是针对异步的,当主线程需要阻塞等待所有 3 个派生线程完成时,这真的是个好主意吗?
- 传入一个对象(给线程),然后简单地让线程用结果“填充它”
- 以某种方式使用 Runnable(还不确定如何)。
无论如何 - 最好、最简单的推荐方法是什么? 谢谢,
最佳答案
List<Callable<Result>> list = ... create list of callables
ExecutorService es = Executors.newFixedThreadPool(3);
List<Future<Result>> results = es.invokeAll(list);
ExecutorService.invokeAll
方法将仅在所有任务(Callable 的实例)完成后返回,无论是正常还是通过抛出异常。
有关详细信息,请参阅 ExecutorService
(主要是它的invokeAll
方法),Executors
, Callable
.
关于java - 从启动的线程中收集返回值? [最新Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845368/