java - 从启动的线程中收集返回值? [最新Java]

标签 java multithreading

我正在寻找最简单、最直接的方法来实现以下内容:

  • 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/

相关文章:

java - 从标准输入获取输入

java - 是否应该为 Java 中的线程命名以便于调试?

c# - Encog 在具有多个处理器的多插槽主板上是否具有良好的性能?

c++ - 多线程单例

java - 在 Kotlin 中重写私有(private)方法

java - 如何在 Eclipse 中导入两个项目,就像一个

java - 在 FireFox 16、17、18 + 中使用 java

Java将十六进制转换为Base64

multithreading - 英特尔TBB使用的线程数

java - 在并发环境中创建单例的最佳实践?