ExecutorCompletionService:为什么将结果排队为Future's

时间:2015-05-11 08:34:13

标签: java multithreading

我试图找出ExecutorCompletionService类将结果排在Future<T>而不是T的原因。

根据its API take()

  

&#34;检索并移除代表下一个已完成任务的Future,等待(如果还没有)&#34;

因此,对future.get()的调用永远不会阻止,因为该任务生成的产品已完成100%。

为什么要将该产品封装在Future呢?

1 个答案:

答案 0 :(得分:4)

嗯,有一件事,Future<T>上返回的submit()仍有一些可能与T cancel()不同,例如isDone(),{{ 1}}以及get( long timeOut...)等,所以虽然你可以说take()可以返回T,但也可以认为它更清晰,更灵活地返回而是Future<T>

特别是,它使被叫方有可能确定Callable是否已完成或取消(这是TL; DR答案)

干杯,