我正在寻找实现以下内容的最简单,最直接的方法:
然后其余部分相当简单,处理3个结果然后终止......
现在,我一直在做一些阅读并找到了多个想法,比如:
无论如何 - 什么是最好的,最简单的推荐方法? 谢谢,
答案 0 :(得分:8)
List<Callable<Result>> list = ... create list of callables
ExecutorService es = Executors.newFixedThreadPool(3);
List<Future<Result>> results = es.invokeAll(list);
只有在所有任务(Callable实例)完成后, ExecutorService.invokeAll
方法才会返回,无论是正常还是抛出异常。
有关详细信息,请参阅ExecutorService
(主要是invokeAll
方法),Executors
,Callable
。
答案 1 :(得分:0)
您也可以使用java.util.concurrent中的信号量。
使用1 - #threads许可创建一个新的Semaphore,并在信号量上调用主要的gets()。
当你创建的每个线程完成它的工作时,让它调用release()方法。
由于您创建了一个允许负数的信号量,因此对acquire()的调用将阻塞,直到此数字变为正数。直到你的所有线程都在Semaphore上发布了许可证后才会发生这种情况。