温少的日志

我希望我所作的事情对别人有所帮助!
随笔 - 184, 文章 - 1, 评论 - 1094, 引用 - 11
数据加载中……

ExecutorCompletionService的疑问

java.util.concurrent中的ExecutorCompletionService,其实现的是CompletionService接口。

我对ExecutorCompletionService存在一个疑问,在其实现中,task是被执行之后,才把futureTask加入到completionQueue,既然如此,不如直接把Result加入到completionQueue中了。这个行为没什么差别的。对这个类的设计存在一些怀疑,我认为其task方法,似乎返回值是V更合适。

原来是这样的:
Future<V> take() throws InterruptedException;
Future
<V> poll();


觉得也许应该改称这样:
V take() throws InterruptedException;
V poll();

posted on 2006-11-13 20:11 温少 阅读(736) 评论(1)  编辑 收藏 网摘

评论

#1楼[楼主]   回复  引用  查看    

使用Future<V>作返回值似乎能够提供更多的功能。

在ExecutorCompletionService的实现中,使用一个Executor,一个BlockingQueue<Future<V>>。
当Submit的时候,转化为一个内嵌类class QueueingFuture extends FutureTask<Void>。
当executor执行task结束后,会调用QueueingFuture的done方法,把Result加入到completionQueue中。
至于为什么使用BlockingQueue<Future<V>>作为completionQueue,而不使用BlockingQueue<V>,是因为executor执行task时,可能出错,这是使用Future就有意义了。
可以获得执行出错信息,future.get()会抛出ExecutionException。
2006-11-13 20:40 | 温少      



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 559609




相关文章:

相关链接: