码迷,mamicode.com
首页 > 其他好文 > 详细

Future 接口

时间:2017-10-30 15:07:26      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:cell   线程   run   cas   方法   调用exe   存储   task   one   

boolean cancel(

boolean isCancelled();

boolean isDone();

 V get()

-----------------------实现future接口的类(都叫做一个task,因为是一个任务一段逻辑),一般都会被放到一个线程里,但是新开线程的执行是异步的,但是如果此时要获取线程执行的结果,就需要基于cas+volatile,实现future接口,看看这个逻辑走完了没。

比如isdone方法,取消,还有get方法看结果。

实现的类一般都会有一个status(volatile的),一个outcome用来存储结果,还有一个callable引用,指向一个实现了callable接口的对象,这个对象重写call方法,而实现Future接口的类 如果实现了, 实现Runnable接口(RunnableFuture接口),会重写其中的run方法。

run方法中一般会调用call方法,call方法和run方法不同的是,它有返回值,那么就可以赋值给outcome,然后根据状态,来进行线程之间的通信。比如:FutureTask

当然,实现了Future接口的类也可以不实现runnable接口,而由线程池调用它的call方法。比如ForkJoinTask  RecursiveTask。forkjoinPool的invoke方法是调用 task的invoke方法。forkjointask 的invoke 方法调用exec(),继承的RecursiveTask方法重写了exec(),调用一个

compute方法,返回值赋值给result(通过调用getResult类似的方法,而recursive方法重写了该方法,返回的是recursivetask的属性result(泛型))

 

Future 接口

标签:cell   线程   run   cas   方法   调用exe   存储   task   one   

原文地址:http://www.cnblogs.com/chuliang/p/7753442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!