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