java - CompletionService.take().isDone() 总是 true 吗?

标签 java concurrency future

可以安全地假设

java.util.concurrent.CompletionService.take().isDone() 

总是返回true?如果是这样,为什么 take() 返回一个 Future,而不是直接返回值?如果不是,文档中使用的“已完成的任务”是什么意思?

最佳答案

因为你可以将 Future 用于其他事情。当你提交()时,你就得到了 future 。所以你可以首先使用返回的Future对象来监视状态或提前取消。其次,如果您更改 futureFactory() (我认为它的名称有所不同,但我安装了 Java 5 而不是 6),您可以向 future 对象添加各种额外的成员。

因此,在执行 take() 时,您是对的,在这种情况下, future 的一部分(状态的跟踪/取消)并不是很有用。但是 OTOH,为什么不按原样返回整个 future ,包括扩展功能?

关于java - CompletionService.take().isDone() 总是 true 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610295/

相关文章:

java - 所需项目中存在 Eclipse 错误,但编辑器未显示任何错误

java - 对从 websocket 接收的事件进行排队以进行异步处理的最佳方法

Java - 为什么 Eclipse 告诉我我的方法必须返回类型 int?

java - 信号量和条件的区别(ReentrantLock)

java - Gui 卡住在 while 循环中

unit-testing - 将 future 传递给 whenReady 失败

asynchronous - 如何在回调中使用 Rust future?

java - 检查数组中某个值是否连续重复 5 次

java - 并发访问用于计算逾期天数的静态方法

java - 如何在同一 Java 流中正确提交和获取多个 Futures?