Executorservice InvokeAll Timeout vs Future get Timeout

时间:2018-04-02 13:33:51

标签: java executorservice threadpoolexecutor

我们可以将等待时间限制作为参数调用所有方法(或)future object get方法

超时后会有什么不同?

executorService.invokeAll(Arrays.asList(callabletask), 10, TimeUnit.SECONDS);
  

VS

executorService.submit(callabletask).get(10, TimeUnit.SECONDS);

1 个答案:

答案 0 :(得分:0)

executorService.invokeAll(Arrays.asList(callabletask), 10, TimeUnit.SECONDS); 等待列表中的所有任务在超时之前完成。如果任务在超时到期之前没有完成,则方法抛出TimeoutException。

executorService.submit(callabletask).get(10, TimeUnit.SECONDS); 在超时之前只等待一个任务(callabletask)完成。如果任务在超时到期之前没有完成,则此方法也会抛出TimeoutException。

在这种情况下,两种情况都是相同的,因为您发送的任务列表为Arrays.asList(callabletask)

您可以看到:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#invokeAll(java.util.Collection,%20long,%20java.util.concurrent.TimeUnit)