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框架示例相关推荐

  1. java检查注入sql框架_Java:检查器框架

    java检查注入sql框架 我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework . Checker Framework的网页之一 指出 ,Checker Fram ...

  2. java中的集合框架_JAVA中的集合框架(上)List

    第一节 JAVA中的集合框架概述 集合的概念,现实生活中:很多事物凑在一起就是一个集合:数学中的集合:具有相同属性事物的总体:JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对 ...

  3. java的jce框架_Java Cryptographic Extension (JCE) 框架的核心应用

    游戏网 网页游戏 健康网 dnf 永恒之塔 汽车网 女人 魔晶幻想 开心农场 二手车 ol小游戏 凌天传说 很纯很暧昧 斗破苍穹 陈二狗的妖孽人生 斗罗大陆 流氓老师 逍行纪 长生界 魔兽领主 我的女 ...

  4. java目前主流框架_java的三大主流框架介绍

    <java的三大主流框架介绍>由会员分享,可在线阅读,更多相关<java的三大主流框架介绍(2页珍藏版)>请在装配图网上搜索. 1.java的三大主流框架介绍java的三大主流 ...

  5. java 高效io框架_Java基础之IO框架

    一:串流设计的概念 Java 将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象.比喻 来说,数据就好比水,串流好比水管,通过水管的衔接,水由一端流向另一端. 在不使用 InputSt ...

  6. java编程executor框架_Java并发编程 - Executor框架(一)Executor,

    1.并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,然后将这些任务提交给一个Executor执行, Executor.execute(Runnalbe) .Executor在执 ...

  7. java图片框架_Java图片处理开源框架

    欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入 5.水印 [java] view plaincopyprint? //watermark(位置,水印图,透明度) Thumb ...

  8. java流框架_Java中的IO框架流二

    1      IO(二)No19 [ 缓冲流:内置了缓冲区,对现有的流对象进行了封装,实现了高效的读写操作并增强了功能 字节缓冲流 BufferedInputStream BufferedOutput ...

  9. java fork join原理_细说Fork/Join框架

    什么是Fork/Join框架? Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork就是把一个大 ...

  10. java 简单 框架_java简单框架设计

    设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个web服务.网站. 或者一个业务微服务,需要从原来使用视角转换成一个构建者视角. 框架或者工具,更多是框架来管理或者 ...

最新文章

  1. 【C++】C++11新增关键字详解
  2. App_GlobalResources、App_LocalResources (理论篇)(
  3. 介绍一种Fiori标准应用的增强方式
  4. 使用云原生buildpacks将你的代码转换成Docker Image | 技术头条
  5. MySQL提示The server quit without updating PID file问题的解决办法
  6. 【原创】技术人员如何去面试?
  7. 二叉树前序,中序,后序遍历的迭代实现,实现思路及代码
  8. skywalking搭建与使用
  9. php基础01~命名、传值问题
  10. android 图片文字布局,Android自定义控件图片+文字布局
  11. php转义还原,PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例_PHP
  12. 初生牛犊不怕虎 造车新势力的硬核移动互联科技盘点
  13. python自学之《21天学通Python》(2)
  14. Intriguing properties of neural networks
  15. 社群运营,做好群活跃的6个要点
  16. 【神经网络第三期】RBF神经网络基本原理和模型应用
  17. I2C操作笔记——以 AT24C04为例
  18. SPSS数据拆分(分组)
  19. OAuth2客户端springsecurity5 - 神经病的缥缈之旅
  20. Android 仿墨迹天气24小时预报

热门文章

  1. 汇编语言(十九)之删除数组中的元素
  2. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
  3. 设计模式之静态代理模式实战
  4. Class的 getSuperclass与getGenericSuperclass区别
  5. auto.js小案例
  6. 来自学长同学分享的学习方法
  7. ps中将图片拖不进ps的编辑区的解决方法
  8. Hibernate基本概念 (2)
  9. 电脑任务栏跑到右边去了_电脑没有声音怎么解决 电脑没有声音解决方法【详解】...
  10. java集合——集合接口+迭代器接口