分支合并框架ForkJoinPool

原理说明:就是在必要情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行join汇总

示例:示例是一个1亿的累加,100亿的累加,500亿的累加。采用三种算法,一种是ForkJoinPool框架,一种是jdk1.8的算法框架,一种是传统的循环相加的算法
依次给出了运算的时间:
示例代码:

package com.debuggg.test1.main2;import org.junit.jupiter.api.Test;import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
import java.util.stream.LongStream;public class TestForkJoinPool {public static void main(String[] args) {Instant start = Instant.now();ForkJoinSum forkJoinSum = new ForkJoinSum(0L, 50000000000L);ForkJoinPool pool = new ForkJoinPool();Long sum = pool.invoke(forkJoinSum);System.out.println(sum);Instant end = Instant.now();System.out.println("耗费时长为:" + Duration.between(start,end).toMillis());//1亿是83ms,100亿是3152,5百亿是13869}@Testpublic void test1(){Instant start = Instant.now();long sum = 0;for (long i = 0; i < 50000000000L; i++) {sum += i;}System.out.println(sum);Instant end = Instant.now();System.out.println("耗费时长为: " + Duration.between(start,end).toMillis());//1亿是46ms,100亿是5167,5百亿是24323}@Testpublic void test2(){Instant start = Instant.now();long sum = LongStream.rangeClosed(0L, 10000000000L).parallel().reduce(0L, (a, b) -> Long.sum(a, b));System.out.println(sum);Instant end = Instant.now();System.out.println("耗费时长为:" + Duration.between(start,end).toMillis());//1亿是217,1百亿是1956,5百亿是9923}}class ForkJoinSum extends RecursiveTask<Long> {private static final long serialVersionUID = -1;private long start;private long end;private static final long THRESHOLD = 10000L;public ForkJoinSum(long start, long end){this.start = start;this.end = end;}@Overrideprotected Long compute() {if(end - start <= THRESHOLD){long sum = 0L;for (long i = start; i <= end; i ++){sum += i;}return sum;}else{long middle = (start + end) / 2;ForkJoinSum left = new ForkJoinSum(start, middle);left.fork();ForkJoinSum right = new ForkJoinSum(middle + 1, end);right.fork();return left.join() + right.join();}}
}

ForkJoinPool分支合并框架计算加法相关推荐

  1. java合并后求和_用分支/合并框架执行并行求和

    分支/合并框架的目的是以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任 务的结果合并起来生成整体结果.它是 ExecutorService 接口的一个实现,它把子任务分配给 线程池(称为 F ...

  2. 什么是ForkJoin、ForkJoin分支合并、ForkJoin工作窃取、ForkJoin大数据求和计算

    什么是ForkJoin.ForkJoin分支合并.ForkJoin工作窃取.ForkJoin大数据求和计算 什么是ForkJoin? ForkJoin:分支合并 ForkJoin特点:工作窃取 如何让 ...

  3. c++两个vector合并_这才是真正的 Git:分支合并

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...

  4. 根据开发提供的svn更新版本号从开发分支合并代码到测试分支工作目录的部分脚本...

    最近在做发布流程相关事情.当开发需要将更改的代码提交到测试环境测试之前,需要开发给出一个版本号,如418或418:419或者418:419,420这种格式.然后将开发分支合并到测试分支工作目录.如果给 ...

  5. c++两个vector合并_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  6. 这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  7. smartSVN 分支合并到主干上,iOS 编译时链接错误

    项目中需要将分支与主干进行合并,通常都是将分支合并到主干上,但是这次是将主干上的内容合并到分支上.查询到以下博文,不知为何,该博文被封了,只好用快照复制下来,方便以后查阅. 1.创建分支的意义 创建分 ...

  8. 第一章 计算思维与一种表述计算思维的框架------计算之树

    第一章 计算思维与一种表述计算思维的框架------计算之树 1.硬件 vs. 软件 2.计算思维 3.计算之树--计算思维的一种多维度观察框架 3.1计算之树的树根(技术或思想) 3.2计算之树的树 ...

  9. smartSVN 分支合并到主干

    项目中需要将分支与主干进行合并,通常都是将分支合并到主干上,但是这次是将主干上的内容合并到分支上.查询到以下博文,不知为何,该博文被封了,只好用快照复制下来,方便以后查阅. 1.创建分支的意义 创建分 ...

最新文章

  1. Java之定时任务详解
  2. 高效的判断素数---筛选法
  3. 官方首次披露,TDSQL十年自主可控之路(附PDF)
  4. 一分钟明确 VS manifest 原理
  5. jzoj3798-[NOIP2014模拟8.22]临洮巨人【前缀和】
  6. python中json如何存放字节数组中_测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)...
  7. 网易云音乐刷听歌量_「PC端」解锁网易云音乐灰色歌曲,让你听歌不用东跑西跑...
  8. ACdream 1148(莫比乌斯反演+分块)
  9. android第三方集成埋点,Android集成mPass 埋点遇到的问题
  10. Java实战---搜搜移动业务大厅
  11. Pytorch - masked_fill方法参数详解与使用
  12. 计算机学后感作文400,考试后的感想作文400字(精选10篇)
  13. [Android Pro] proguard.cfg 配置文件
  14. C语言实现位数组(bit数组)与位数组的简单应用举例
  15. 微软官方出了一款吊打WPS的PPT插件
  16. 【转】-ECshop数据库表结构
  17. Alpine执行bash
  18. AUTOCAD——面域
  19. js正则表达式过滤表情,输入法表情无法匹配,则反向判断
  20. 纸上得来终觉浅(experience is the best teacher)

热门文章

  1. 未来新型计算机可能有,上海科学家构建出新型“DNA逻辑门”DNA分子有望成未来超级计算机...
  2. hive 增加表字段语录_Hive改表结构的两个坑|避坑指南
  3. VCenter配置ESXI主机syslog日志收集
  4. 消息中间件学习总结(2)——RocketMQ之阿里开源消息中间件RocketMQ的前世今生
  5. Spring Boot学习总结(12)——Spring Boot Admin 2.0应用监控示例
  6. markdown 本地链接_Markdown的使用
  7. 我要做 Android 之 ContentProvider
  8. pip: command not found
  9. java开发web使用struts2,springMVC和spring,Jquery的理由?
  10. scjp考试准备 - 11 - 类型转换2