您的位置:首页 > 编程语言

【并发编程】Future和FutureTask以及CompletionService

2016-04-25 17:15 417 查看

Future接口



此接口主要用于:代表异步计算的执行结果;
用于可取消的task;(比使用interrupt实现取消要方便 )



FutureTask类

FutureTask是Future的一个实现类;类图层次结构如下:


FutureTask任务的创建--通过构造函数

在java的并发模型中,表示Task的类主要有如下几个(其中Callable和Runnable是最基本的):Callable;
Runnable;
Future;





其中Callable和Runnable接口的主要区别在于:
Callable可以有返回值,且可以抛出异常;

Runnable没有返回值,且不抛出异常;

FutureTask任务的创建,可以通过Callable和Runnable两个任务类进行创建,即对Callable和Runnable进行封装,见下面的构造函数:





get():过去异步计算的结果

(有时间待完善。。。)

done():异步计算完成后调用的回调函数 ==>CompletionService

可在FutureTask子类中实现该方法,以实现一些额外的功能,如:


Java类库中,有一个类的功能,就是基于此done()方法来实现的,该类中包括两个重要的属性:Executor;==>用于提交任务使用
BlockingQueue; ==>当任务完成后,会将task对应的Future保存起来;



具体实现步骤如下:Callable或Runnable任务 ===> RunnableFuture ===> QueueingFuture1.newTaskFor():[/b] 将Callable和Runnable任务封装为:RunnableFuture


2. 使用FutureTask的done():提交task到BlockingQueue ==>实现“生产者-消费者


3. 使用executor来提交任务;


通过上面3个步骤,一个Callable或Runnable任务在执行完成后,都会被添加到BlockingQueue中,此时就可以实现生产者和消费者模式;


有时间补充。。。。

来自为知笔记(Wiz)

附件列表

Future.png
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: