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

九 fork/join CompletableFuture

时间:2018-01-19 00:16:47      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:class   size   java   汇总   future   done   对比   call   说明   

1: Fork/join

fork/join:  fork是分叉的意思, join是合并的意思。

Fork/Join框架:是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。

Fokr/Join的适合场景:所处理的元素必须是独立的,数据集要足够大;

                                     并且在并行加速方面,每个元素的处理成本要足够高,这样才能补偿建立fork/join框架所消耗的成本。

 

这个文章中的例子(http://www.infoq.com/cn/articles/Functional-Style-Callbacks-Using-CompletableFuture)很好的说明了 Future, ExecutorCompletionService,

CompletableFuture处理一个图片下载的例子时候的对比。

2: Future:

     Future是Java 5添加的类,用来描述一个异步计算的结果,但是获取一个结果时方法较少,要么通过轮询isDone,确认完成后,调用get()获取值;

     要么调用get()设置一个超时时间。但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背;

      Future本身并不能提供回调方法.  任务提交到executor,通过Future.isDone和阻塞的Future.get()来看结果是否完成。

 

3: ExecutorCompletionService

     把多个FutureTask提交到ExecutorCompletionService,task执行完的结果放到queue中,ExecutorCompletionService.get() 或者,poll()会从队列中依次取得

     执行完的task, 再进行下一步处理。(这个方法比上面的方法好,上面只能是按照提交的顺序依次判断结果是否完成)

3: CompletableFuture

       它能够将回调放到与任务不同的线程中执行(thenApplyAsync),也能将回调作为继续执行的同步函数(thenApply),在与任务相同的线程中执行。

       它避免了传统回调最大的问题,那就是能够将控制流分离到不同的事件处理器中(thenApplyAsync()可以异步的在不同的线程中处理上一步结果)

 4: CompletableFutre详解

待续... ...

https://www.cnblogs.com/tian666/p/7840232.html

九 fork/join CompletableFuture

标签:class   size   java   汇总   future   done   对比   call   说明   

原文地址:https://www.cnblogs.com/liufei1983/p/8313431.html

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