fork join框架_Java 7:Fork / Join框架示例
fork join框架
Java 7中的Fork / Join Framework专为可分解为较小任务的工作而设计,并将这些任务的结果组合起来以产生最终结果。 通常,使用Fork / Join Framework的类遵循以下简单算法:
// pseudocode
Result solve(Problem problem) {if (problem.size < SEQUENTIAL_THRESHOLD)return solveSequentially(problem);else {Result left, right;INVOKE-IN-PARALLEL {left = solve(extractLeftHalf(problem));right = solve(extractRightHalf(problem));}return combine(left, right);}
}
为了证明这一点,我创建了一个示例,使用fork / join从一个大型数组中查找最大数量:
import java.util.Random;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;public class MaximumFinder extends RecursiveTask<Integer> {private static final int SEQUENTIAL_THRESHOLD = 5;private final int[] data;private final int start;private final int end;public MaximumFinder(int[] data, int start, int end) {this.data = data;this.start = start;this.end = end;}public MaximumFinder(int[] data) {this(data, 0, data.length);}@Overrideprotected Integer compute() {final int length = end - start;if (length < SEQUENTIAL_THRESHOLD) {return computeDirectly();}final int split = length / 2;final MaximumFinder left = new MaximumFinder(data, start, start + split);left.fork();final MaximumFinder right = new MaximumFinder(data, start + split, end);return Math.max(right.compute(), left.join());}private Integer computeDirectly() {System.out.println(Thread.currentThread() + ' computing: ' + start+ ' to ' + end);int max = Integer.MIN_VALUE;for (int i = start; i < end; i++) {if (data[i] > max) {max = data[i];}}return max;}public static void main(String[] args) {// create a random data setfinal int[] data = new int[1000];final Random random = new Random();for (int i = 0; i < data.length; i++) {data[i] = random.nextInt(100);}// submit the task to the poolfinal ForkJoinPool pool = new ForkJoinPool(4);final MaximumFinder finder = new MaximumFinder(data);System.out.println(pool.invoke(finder));}
}
MaximumFinder
类是一个RecursiveTask
,它负责从数组中查找最大数目。 如果数组的大小小于阈值(5),则通过遍历数组直接找到最大值。 否则,将数组分成两半,每半递归并等待它们完成( join
)。 一旦我们得到了每一半的结果,我们就可以找到两个的最大值并返回。
参考: Java 7:我们的JCG合作伙伴 Fahd Shariff在fahd.blog博客上提供的Fork / Join Framework Example 。
翻译自: https://www.javacodegeeks.com/2013/02/java-7-forkjoin-framework-example.html
fork join框架
fork join框架_Java 7:Fork / Join框架示例相关推荐
- java检查注入sql框架_Java:检查器框架
java检查注入sql框架 我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework . Checker Framework的网页之一 指出 ,Checker Fram ...
- java中的集合框架_JAVA中的集合框架(上)List
第一节 JAVA中的集合框架概述 集合的概念,现实生活中:很多事物凑在一起就是一个集合:数学中的集合:具有相同属性事物的总体:JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对 ...
- java的jce框架_Java Cryptographic Extension (JCE) 框架的核心应用
游戏网 网页游戏 健康网 dnf 永恒之塔 汽车网 女人 魔晶幻想 开心农场 二手车 ol小游戏 凌天传说 很纯很暧昧 斗破苍穹 陈二狗的妖孽人生 斗罗大陆 流氓老师 逍行纪 长生界 魔兽领主 我的女 ...
- java目前主流框架_java的三大主流框架介绍
<java的三大主流框架介绍>由会员分享,可在线阅读,更多相关<java的三大主流框架介绍(2页珍藏版)>请在装配图网上搜索. 1.java的三大主流框架介绍java的三大主流 ...
- java 高效io框架_Java基础之IO框架
一:串流设计的概念 Java 将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象.比喻 来说,数据就好比水,串流好比水管,通过水管的衔接,水由一端流向另一端. 在不使用 InputSt ...
- java编程executor框架_Java并发编程 - Executor框架(一)Executor,
1.并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,然后将这些任务提交给一个Executor执行, Executor.execute(Runnalbe) .Executor在执 ...
- java图片框架_Java图片处理开源框架
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入 5.水印 [java] view plaincopyprint? //watermark(位置,水印图,透明度) Thumb ...
- java流框架_Java中的IO框架流二
1 IO(二)No19 [ 缓冲流:内置了缓冲区,对现有的流对象进行了封装,实现了高效的读写操作并增强了功能 字节缓冲流 BufferedInputStream BufferedOutput ...
- java fork join原理_细说Fork/Join框架
什么是Fork/Join框架? Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork就是把一个大 ...
- java 简单 框架_java简单框架设计
设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个web服务.网站. 或者一个业务微服务,需要从原来使用视角转换成一个构建者视角. 框架或者工具,更多是框架来管理或者 ...
最新文章
- 【C++】C++11新增关键字详解
- App_GlobalResources、App_LocalResources (理论篇)(
- 介绍一种Fiori标准应用的增强方式
- 使用云原生buildpacks将你的代码转换成Docker Image | 技术头条
- MySQL提示The server quit without updating PID file问题的解决办法
- 【原创】技术人员如何去面试?
- 二叉树前序,中序,后序遍历的迭代实现,实现思路及代码
- skywalking搭建与使用
- php基础01~命名、传值问题
- android 图片文字布局,Android自定义控件图片+文字布局
- php转义还原,PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例_PHP
- 初生牛犊不怕虎 造车新势力的硬核移动互联科技盘点
- python自学之《21天学通Python》(2)
- Intriguing properties of neural networks
- 社群运营,做好群活跃的6个要点
- 【神经网络第三期】RBF神经网络基本原理和模型应用
- I2C操作笔记——以 AT24C04为例
- SPSS数据拆分(分组)
- OAuth2客户端springsecurity5 - 神经病的缥缈之旅
- Android 仿墨迹天气24小时预报