我需要一次执行一些任务4,如下所示:

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
    taskExecutor.execute(new MyTask());
}
//...wait for completion somehow

完成所有步骤后如何通知我?现在,我想不出什么比设置一些全局任务计数器并在每个任务结束时减少它,然后无限循环监视此计数器为0更好的了。或获取 future 的列表,并在无限循环中对所有 future 进行isDone监视。什么是不涉及无限循环的更好的解决方案?

谢谢。

最佳答案

基本上在 ExecutorService 上,您先调用 shutdown() ,然后再调用 awaitTermination() :

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
  taskExecutor.execute(new MyTask());
}
taskExecutor.shutdown();
try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
  ...
}

08-04 00:45