假设
是否安全java.util.concurrent.CompletionService.take().isDone()
总是会返回true吗?如果是这样,为什么take()返回Future而不是直接返回值?如果没有,文档中使用的“完成任务”是什么意思?
答案 0 :(得分:3)
因为你可以将Future用于其他事情。提交()时,您将获得未来。因此,您首先可以使用返回的Future对象来监视状态或提前取消。其次,如果你更改futureFactory()(我认为它被称为不同的东西,但我安装了Java 5),你可以将所有类型的额外成员添加到未来的对象中。
因此,在执行take()时,你是对的,在这种情况下,未来的一部分(跟踪/取消状态)不是很有用。但OTOH,为什么不回归整个未来,包括扩展功能?
答案 1 :(得分:0)
这就是javadoc似乎意味着什么,take()
阻塞,直到它可以返回一个完成的Future,当然它将在返回时完成。