所有任务完成后,执行者服务如何发出信号?

时间:2015-03-29 12:01:13

标签: java multithreading concurrency thread-safety

我读了这个post

我想用所有任务结果填充一个数组

但我想只在所有Future都有值(也就是所有任务都有结果)时调用某个方法。

有没有办法写出这样的障碍?

1 个答案:

答案 0 :(得分:1)

使用执行程序服务,您需要将其关闭并等待其终止。

executorService.shutdown();
executorService.awaitTermination(1,TimeUnit.HOUR);

关机不会立即停止执行程序,但会阻止它执行新任务,并且允许完成已提交的任务。

awaitTermination阻塞调用线程,直到处理执行程序中的整个任务队列。

另一种方法是使用ExecutorCompletionService代替并take()调用提交任务的次数。每次拍摄都将阻止,直到未来完成(或失败)。