Java在JDK7之后加入了并行计算的框架Fork/Join,可以解决我们系统中大数据计算的性能问题。Fork/Join采用的是分治法,Fork是将一个大任务拆分成若干个子任务,子任务分别去计算,而Join是获取到子任务的计算结果,然后合并,这个是递归的过程。子任务被分配到不同的核上执行时,效率最高。

package com.thread.forkjoin;import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;/*** Java在JDK7之后加入了并行计算的框架Fork/Join,可以解决我们系统中大数据计算的性能问题。* Fork/Join采用的是分治法,Fork是将一个大任务拆分成若干个子任务,子任务分别去计算,而Join是获取到子任务的计算结果,然后合并,这个是递归的过程。* 子任务被分配到不同的核上执行时,效率最高。*/
public class ForkJoinTest extends RecursiveTask<Long> {private static final int THREADSHOLD = 50000;private long[] array;private int low;private int hight;public ForkJoinTest(long[] array, int low, int hight) {this.array = array;this.low = low;this.hight = hight;}@Overrideprotected Long compute() {long sum = 0;if (hight - low < THREADSHOLD) {for (int i = low; i < hight; i++) {sum += array[i];}} else {int middle = (low + hight) >>> 1;ForkJoinTest left = new ForkJoinTest(array, low, middle);ForkJoinTest right = new ForkJoinTest(array, middle + 1, hight);left.fork();right.fork();sum = left.join() + right.join();}return sum;}public static void main(String[] args) throws ExecutionException, InterruptedException {long[] array = genArray(1000000);System.out.println(Arrays.toString(array));ForkJoinTest forkJoinTest = new ForkJoinTest(array, 0, array.length - 1);long begin = System.currentTimeMillis();ForkJoinPool forkJoinPool = new ForkJoinPool();forkJoinPool.submit(forkJoinTest);Long result = forkJoinTest.get();long end = System.currentTimeMillis();System.out.println(String.format("结果 %s 耗时 %sms", result, end - begin));}private static long[] genArray(int size) {long[] array = new long[size];for (int i = 0; i < size; i++) {array[i] = new Random().nextLong();}return array;}
}

java并行计算Fork和Join的使用相关推荐

  1. Java并发-Fork/Join框架

    参考博客:https://www.infoq.cn/article/fork-join-introduction 1. 什么是 Fork/Join 框架 Fork/Join 框架是 Java7 提供了 ...

  2. java中fork什么意思_java 中的fork join框架

    fork join框架是java 7中引入框架,这个框架的引入主要是为了提升并行计算的能力. fork join主要有两个步骤,第一就是fork,将一个大任务分成很多个小任务,第二就是join,将第一 ...

  3. Fork and Join: Java Can Excel at Painless Parallel Programming Too!---转

    原文地址:http://www.oracle.com/technetwork/articles/java/fork-join-422606.html Multicore processors are ...

  4. Fork and Join: Java也可以轻松地编写并发程序 原文地址 作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zi

    Fork and Join: Java也可以轻松地编写并发程序 原文地址   作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zip) ...

  5. java中fork函数_java中的forkjoin框架的使用

    fork join框架是java 7中引入框架,这个框架的引入主要是为了提升并行计算的能力. fork join主要有两个步骤,第一就是fork,将一个大任务分成很多个小任务,第二就是join,将第一 ...

  6. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  7. 【JUC并发编程12】Fork与Join分支

    12 Fork 与 Join分支 将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果. 该算法相当于递归,且是二分查找思路 class Fibonacci extends ...

  8. Java多线程神器:join使用及原理

    转载自 Java多线程神器:join使用及原理 join() join()是线程类 Thread的方法,官方的说明是: Waits for this thread to die. 等待这个线程结束,也 ...

  9. java fork_浅谈Java的Fork/Join并发框架

    前几天有写到整合并发结果的文章,于是联想到了Fork/Join.因为在我看来整合并发结果其实就是Fork/Join中的Join步骤.所以今天我就把自己对Fork/Join一些浅显的理解记录下来. 1. ...

最新文章

  1. uniapph5配置index.html模板路径不生效解决办法
  2. Xamarin Essentials教程构建共享请求
  3. 人工智能到底是什么?人工智能如何改变社会?中国的人工智能应该做怎样的探索?
  4. oracle协议适配器错误00530,oracle监听程序无法启动(TNS-12560: TNS: 协议适配器错误,TNS-00530: 协议适配器错误)...
  5. 【Python】全面掌握Python基础,这一篇就够了,建议收藏
  6. 【忘川风华录】交互负责人:在奇幻和萌趣中探索国风的立体体验
  7. CentOS查询端口占用和清除端口占用的程序
  8. 在Ubuntu上搭建Hadoop群集
  9. IO流(1)--文件流及其原理
  10. 通用各类数据库密码字典
  11. ‘latin-1‘ codec can‘t encode characters in position 5-17: ordinal not in range(256) 在请求数据的时候提示报错
  12. jscript php,PHP, JScript和VBScript函数和类的语法
  13. Google 微数据,快速指引。
  14. springboot影院售票小程序毕业设计源码111154
  15. java-php-python-ssm漠河旅游官网计算机毕业设计
  16. 在线查询IP及IP信息
  17. case when 用法
  18. 多方安全计算-秘密共享
  19. 【Leetcode】914. 卡牌分组
  20. 陈彤离职新浪:传统门户时代的告别

热门文章

  1. 固态硬盘ps3111开卡工具_固态硬盘必备工具:系统无损迁移、僵尸文件立现原形...
  2. win10子系统编译android,基于win10子系统ijkplayer全量编译(支持所有格式)流程
  3. php创建实例对象数组,php – 使用arguments数组创建新的对象实例
  4. 应届生拿到offer之后的流程_【经验】我是如何一步步拿到拼多多amp;京东amp;艺龙等多个产品offer的...
  5. 读取pcap获得端口_渗透技巧——获得Exchange GlobalAddressList的方法
  6. pytorch nn.Softmax
  7. 3.9 训练一个 Softmax 分类器
  8. Jupyter Notebook 转pdf 中文处理
  9. web 错误 处理你的请求时出错_最强辅助Jmeter技术干货:JMeter中处理器的另类玩法...
  10. linux多目录多域名,一个空间放多个网站(多域名绑定到同一空间不同目录)