如何使用ExecutorService获取提交的所有任务的结果?

时间:2018-02-07 21:28:58

标签: java multithreading concurrency future executorservice

我有一个要求,我必须为5个任务启动5个线程,并且任务完成的特定超时。超时后我想要所有任务的结果。我如何使用ExecutorService? 根据我所读到的关于ExecutorService的内容,我总结说我需要的是:

List<Future> futures = new ArrayList<Future>();
futures.addAll(executor.submit(new someCallable()));
try {
    if (!executorService.awaitTermination(30*1000, TimeUnit.MILLISECONDS)) {
        executorService.shutdownNow();
    } 
} catch (InterruptedException e) {
    executorService.shutdownNow();
}

我应该future.get()吗?中断/不完整线程的结果怎么样?我对这部分感到困惑。 如果线程失败,我想标记其状态字段=失败,如果线程成功,我想将它们标记为成功。

2 个答案:

答案 0 :(得分:0)

您可以使用invokeAll中的ExecutorService指定的超时时间 - API

答案 1 :(得分:0)

  

超时后我想要所有任务的结果。我怎样才能使用ExecutorService?

我建议使用Callable

  

任务 返回结果并可能抛出异常 。实施者   定义一个没有名为call的参数的单个方法。

因此,当您覆盖call方法时,要么返回某个状态,要么只是抛出异常失败的情况。然后,稍后使用

future.get()

遍历所有提交的任务并获取其状态,因此您可以更新状态以进行进一步处理。