九 fork/join CompletableFuture
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详解
待续... ...
5: java 8的 paralleStream 用 fork/join框架提供了并发执行能力。
待续... ...
6:
https://www.cnblogs.com/tian666/p/7840232.html
最新文章
- java基础知识(三)java关键字
- 调用CachedRowSetImpl类时出现错误
- [转载]iOS Provisioning Profile(Certificate)与Code Signing详解
- 解读HTML 5新语法 提高语义价值
- 从零开始学习Node.js例子零 永远的Hello World
- java8 函数式编程
- Eclipse 分屏显示同一个文件
- Tensorflow学习笔记(一):MNIST机器学习入门
- Least Common Ancestors 分类: ACM TYPE 2014-10-19 11:24 84人阅读 评论(0) 收藏
- Spring碎点知识
- 有关windows在调试ODOO8.0有些问题
- LeetCode 66. Plus One(加1)
- 在页面加载前先出现加载loading,页面加载完成之后再显示页面
- 解决讨厌的警告 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
- C++ 抽象类与接口
- 『转』统计一个日志文件里,单词出现频率的shell脚本
- js 手机号码和电话号码正则校验
- Service Fabric Cluster Manager
- Google用不了解决方法(添加gmail用不了的方法)
- homebrew常见用法