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

Sha*_*n00 3 java multithreading

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

  • 主要启动并启动3个线程
  • 所有3个任务都处理并以结果值结束(我需要以某种方式返回?)
  • 主要等待(.join?)在每个线程上,以确保他们已经完成了所有3个任务
  • main以某种方式获取每个线程的值(3个值)

然后其余部分相当简单,处理3个结果然后终止......

现在,我一直在做一些阅读,发现了多个想法,比如:

  • 使用Future,但这是forynch,当主线程需要阻止等待所有3个生成的线程到finsih时,这真的是一个好主意吗?
  • 传入一个对象(到一个线程),然后简单地让线程"填充"结果
  • 不知何故使用Runnable(不确定如何).

无论如何 - 什么是最好的,最简单的推荐方法?谢谢,

Pet*_*aný 8

List<Callable<Result>> list = ... create list of callables

ExecutorService es = Executors.newFixedThreadPool(3);
List<Future<Result>> results = es.invokeAll(list);
Run Code Online (Sandbox Code Playgroud)

ExecutorService.invokeAll 只有在所有任务(Callable实例)完成后,或者通过抛出异常,方法才会返回.

有关详情请参阅ExecutorService(主要是它的invokeAll方法), ,.ExecutorsCallable