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框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

numpy T、transpose()函数、swapaxes()函数

目录 1 矩阵转置T&#xff0c;既线性代数中矩阵转置 2 transpose()函数 3 swapaxes()函数 1 矩阵转置T&#xff0c;既线性代数中矩阵转置 示例程序如下&#xff1a; import numpy as npa np.arange(0,24,2).reshape(3, 4)print(*****a****) print(a: \n, a) print(a.…

leetcode-54 螺旋矩阵

题目: 给定一个包含 m x n 个元素的矩阵&#xff08;m 行, n 列&#xff09;&#xff0c;请按照顺时针螺旋顺序&#xff0c;返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,…

米线店结账程序 装饰着模式_实验报告2_装饰者模式

序号&#xff1a;姓名&#xff1a;杨林燕学号&#xff1a;106专业&#xff1a;软件工程日期&#xff1a;成绩&#xff1a;实验二装饰者模式的运用一、实验目的&#xff1a;装饰者模式动态地将责任附加到对象上&#xff0c;若要扩展功能&#xff0c;装饰者提供了比继承更有弹性的…

Java的内置垃圾收集如何使您的生活更美好(大部分时间)

通过从应用程序中学习企业APM产品&#xff0c;发现更快&#xff0c;更高效的性能监控。 参加AppDynamics APM导览&#xff01; “无需为用户编写将寄存器返回到自由存储列表的程序。” 该行&#xff08;以及随后的十几行&#xff09;被埋在约翰麦卡锡&#xff08;John McCart…

PyOpenCV 坐标系统

pyOpenCV中的坐标系统&#xff0c;以图片左上角为原点&#xff08;0,0&#xff09;&#xff0c;水平方向为x轴&#xff08;也既图像的宽度width&#xff09;&#xff0c;竖直方向为y轴&#xff08;也既图像的高度height&#xff09;&#xff0c;如下图所示&#xff1a; #图像中…

office 论文 页码_毕业论文必备技巧:Word页码从第三页开始设置方法

许多应届毕业生在排版毕业论文时候&#xff0c;都会按要求设置页码&#xff0c;第一页是封面&#xff0c;第二页是目录&#xff0c;那么正文内容就要从第三页正式开始了。按照正规设置方式&#xff0c;那么页码此时应该是第三页。但是按照论文格式规定&#xff0c;页码应该是从…

散列

一.什么是散列 散列使用一个散列函数&#xff0c;将一个键映射到一个索引上。散列非常高效。使用散列将耗费O(1)时间来查找、插入、及删除一个元素。 映射表是一种用散列实现的数据结构&#xff0c;映射表是一种存储条目的容器&#xff0c;每个条目包含两个部分&#xff1a;一个…

移动端触摸(touch)事件

目有个交互需要实现手指滑动的交互&#xff0c;pc端使用mousedown,mousemove,mouseup监听实现。 但在ios设备上mousemove是不好监听的&#xff0c;同类的方法是touchstart,touchmove,touchend。 项目需求&#xff0c;需要用到拖动事件。由于不需要考虑IE8等低端浏览器的兼容性&…

numcpp速度对比_PHP和C++性能对比.pdf

PHP 与C性能比较本文博客链接&#xff1a;http://keping.me/php_vs_cpp/PHP 是速度很快的脚本语言&#xff0c;但是用了框架以后好像感觉挺慢的。于是猜测会不会PHP 本身也不是很快。如果不是很快&#xff0c;能否采用 PHP 调用本地动态链接库的形式来提升速度。于是有了下面的…

jndi ldap_什么是JNDI,SPI,CCI,LDAP和JCA?

jndi ldapJNDI代表Java命名和目录接口 。 它是用于提供对目录服务&#xff08;即&#xff0c;服务映射名称&#xff08;字符串&#xff09;与对象&#xff0c;对远程对象或简单数据的引用&#xff09;访问的API。 这就是所谓的 约束力 。 绑定集称为上下文 。 应用程序使用JND…

PyOpenCV 基本操作

目录 1. 图片加载、显示和保存 2. 图像显示窗口创建与销毁 3. 图片宽、高、通道数获取 4. 图像像素数目和图像数据类型的获取 5. 生成指定大小的空图像, 生成指定大小的空图像 6. 访问和操作图像像素 7. 图像三通道分离和合并 8. 抓取摄像头 1. 图片加载、显示和保存 …

python中用于标识字符串的定界符_Python 基本数据类型

######################基本数据类型######################数字类型整数 int整数是用来表示整数数值,即没有小数部分的数值,包括正整数 负整数和0整数类型包括十进制整数 八进制整数 十六进制整数和二进制整数例如: 0 , 100 , 65205浮点数 float浮点数由整数部分和小数部分组成…

适用于Java开发人员的Elasticsearch:命令行中的Elasticsearch

本文是我们学院课程的一部分&#xff0c;该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中&#xff0c;我们提供了一系列教程&#xff0c;以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

系统间账号认证系统同步方案

系统间账号认证系统同步方案 基础原理&#xff1a;(基于Web) 浏览器在个请求传递cookie到服务器&#xff0c;服务器对cookie增删改查的操作, 写入JSessionId实现与服务器Session的绑定&#xff0c;保持会话 单机情况下&#xff1a;一个域名&#xff0c;对应一个cookie&#xff…

Pytorch 加载预训练模型参数时出现size mismatch错误

目录 1 不妨先研究一下’ resnet18-5c106cde.pth’里面存了什么东西以及它的数据类型 (1_1)’ resnet18-5c106cde.pth’的数据类型

python元类单例_python面向对象和元类的理解

1 python类对象与实例对象python中一切皆对象(广义上的对象)&#xff0c;类也不例外&#xff0c;我们可以称类为类对象。python中内建函数type()可以返回对象的类型&#xff0c;例如type(int)会得到返回值&#xff0c;而int为类型工厂函数&#xff0c;是内置的类对象。如果对自…

Java命令行界面(第7部分):JCommander

这是我系列的第七篇文章&#xff0c;简要介绍了用于处理Java命令行参数的各种库。 这篇文章回到了基于注释的库的覆盖范围&#xff0c;该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高和最受欢迎的库之一&#xff1a; JCommander 。 JCommander的网页上指出&…

Pytorch 加载部分预训练模型并冻结某些层

目录 1 pytorch的版本&#xff1a; 2 数据下载地址&#xff1a; 3 原始版本代码下载&#xff1a; 4 直接上代码&#xff1a; 1 pytorch的版本&#xff1a; 2 数据下载地址&#xff1a; <https://download.pytorch.org/tutorial/hymenoptera_data.zip> 3 原始…

INT类型知多少

前言&#xff1a; 整型是MySQL中最常用的字段类型之一&#xff0c;通常用于存储整数&#xff0c;其中int是整型中最常用的&#xff0c;对于int类型你是否真正了解呢&#xff1f;本文会带你熟悉int类型相关知识&#xff0c;也会介绍其他整型字段的使用。 1.整型分类及存储范围 整…

altera fpga 型号说明_A/X家FPGA架构及资源评估

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群评估对比xilinx以及altera两家FPGA芯片逻辑资源。首先要说明&#xff0c;现今FPGA除了常规逻辑资源&#xff0c;还具有很多其他片内资源比如块RAM、DSP单元、高速串行收发器、PLL、AD…