概述
引入
我们之前介绍了CompletionService
,它定义了一些新的接口用于按照任务提交的先后顺序来返回Future
,现在我们介绍一个他的实现类,看看它是怎么实现的这个功能。
摘要
介绍了ExecutorCompletionService
的新加功能的实现原理。
类介绍
类定位
此类对CompletionService
进行了基本的实现,实现方法很巧妙。
注意
学习它的思路模式,在后面自己根据业务修改代码时会很方便。
源码解读
我们重点了解它实现“获得任务完成的先后顺序”的。
private class QueueingFuture extends FutureTask<Void> {
QueueingFuture(RunnableFuture<V> task) {
super(task, null);
this.task = task;
}
protected void done() { completionQueue.add(task); }
private final Future<V> task;
}
这实现。。。。。很鸡贼呀。向大佬学习!!!!
使用示例
核心逻辑介绍
此类在构建时使用一个线程池做入参,此类的关注点只是对RunnableFuture
做了一些附加,所有的线程创建及任务执行全部委托给构造函数入参的线程池。
整个类结构清晰,很棒。
使用思路
初始化,正常调用即可,通过了解,完成排序是子任务的回调函数做的,不会占用主线程太大的开销,相比于我们之前的轮循方法,有很大进步。
网友评论