九 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
九 fork/join CompletableFuture的更多相关文章
- JAVA中的Fork/Join框架
看了下Java Tutorials中的fork/join章节,整理下. 什么是fork/join框架 fork/join框架是ExecutorService接口的一个实现,可以帮助开发人员充分利用多核 ...
- JAVA并行框架:Fork/Join
一.背景 虽然目前处理器核心数已经发展到很大数目,但是按任务并发处理并不能完全充分的利用处理器资源,因为一般的应用程序没有那么多的并发处理任务.基于这种现状,考虑把一个任务拆分成多个单元,每个单元分别 ...
- 聊聊并发(八)——Fork/Join框架介绍
作者 方腾飞 发布于 2013年12月23日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧!2 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 ...
- fork/join使用示例
fork/join框架是用多线程的方式实现分治法来解决问题.fork指的是将问题不断地缩小规模,join是指根据子问题的计算结果,得出更高层次的结果. fork/join框架的使用有一定的约束条件: ...
- Java Concurrency - Fork/Join Framework
Normally, when you implement a simple, concurrent Java application, you implement some Runnable obje ...
- Java 7 Fork/Join 并行计算框架概览
应用程序并行计算遇到的问题 当硬件处理能力不能按摩尔定律垂直发展的时候,选择了水平发展.多核处理器已广泛应用,未来处理器的核心数将进一步发布,甚至达到上百上千的数量.而现在 很多的应用程序在运行在多核 ...
- JDK7新特性之fork/join框架
The fork/join framework is an implementation of the ExecutorService interface that helps you take ad ...
- Java并发——Fork/Join框架
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4631466. ...
- 转:聊聊并发(八)——Fork/Join框架介绍
1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过 ...
随机推荐
- 什么是GIL锁以及作用
全局解释锁,每次只能一个线程获得cpu的使用权:为了线程安全,也就是为了解决多线程之间的数据完整性和状态同步而加的锁,因为我们知道线程之间的数据是共享的.
- 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法
本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...
- Android系统移植与调试之------->MTK 标准编译命令
命令格式:./maketek [option] [project] [action] [modules]Option: -t ,-tee :输出log信息到当前终端 -o , -opt=-- ...
- spring jdbcTemplate的CRUD操作
一.jdbcTemplate准备 1.导入与jdbcTemplate相关的jar包 2.设置数据库信息 3.创建jdbcTemplate对象,设置数据源 二.添加操作 1.代码 2.结果 三.修改操作 ...
- linux -unrar解压缩
解压缩命令unrar的使用: $unrar --help 用法: unrar <command>-<switch 1> -<switchN> <arch ...
- R中常用数据挖掘算法包
数据挖掘主要分为4类,即预测.分类.聚类和关联,根据不同的挖掘目的选择相应的算法.下面对R语言中常用的数据挖掘包做一个汇总: 连续因变量的预测: stats包 lm函数,实现多元线性回归 stats包 ...
- mybatis_1
mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE co ...
- 图片加载ImageLoader
https://github.com/nostra13/Android-Universal-Image-Loader public class AtguiguApplication extends A ...
- ThinkPHP中Widget的两种写法及调用
Widget扩展一般用于页面组件的扩展,在页面根据需要输出不同的内容,下面介绍一下ThinkPHP中Widget的两种写法及调用 写法一: ArticlWidget.class.php文件: clas ...
- IOS NSDate 调整当前时间戳为明天
这个可以根据需要调整 在day month hour minute second 等都行 以下是以当前时间戳为基础,调整时间为明天的零点零时零分零秒 可以根据需要 写成毫秒的 +(NSStri ...