ForkJoinPool框架示例
2017-07-30 20:46
375 查看
package com.expgiga.JUC; import java.time.Duration; import java.time.Instant; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.RecursiveTask; import java.util.stream.LongStream; /** * */ public class TestForkJoinPool { public static void main(String[] args) { ForkJoinPool pool = new ForkJoinPool(); ForkJoinTask<Long> task = new ForkJoinSumCalculate(0L, 100000000000L); Long sum = pool.invoke(task); System.out.println(sum); //jdk7 Instant start = Instant.now(); long summ = 0L; for (long i = 0L; i <= 10000000000L; i++) { sum += i; } System.out.println(summ); Instant end = Instant.now(); System.out.println("消耗的时间:" + Duration.between(start, end).toMillis()); //jdk8 Instant startt = Instant.now(); Long summm = LongStream.rangeClosed(0L, 10000000000000L) .parallel() .reduce(0L, Long::sum); System.out.println(summm); Instant endd = Instant.now(); System.out.println("消耗的时间:" + Duration.between(startt, endd).toMillis()); } } class ForkJoinSumCalculate extends RecursiveTask<Long>{ /** * */ private long start; private long end; private static final long THURSHOLD = 10000L;//临界值 public ForkJoinSumCalculate(long start, long end) { this.start = start; this.end = end; } @Override protected Long compute() { long length = end - start; if (length <= THURSHOLD) { long sum = 0L; for (int i = 0; i <= end; i++) { sum += i; } return sum; } else { long middle = (start + end) / 2; ForkJoinSumCalculate left = new ForkJoinSumCalculate(start, middle); left.fork(); //进行拆分,同时压入线程队列 ForkJoinSumCalculate right = new ForkJoinSumCalculate(middle + 1, end); right.fork(); return left.join() + right.join(); } } }
相关文章推荐
- Fork/Join框架小示例-计算连续任意大个数之和
- Fork/join框架之ForkJoinPool
- Fork/join框架之ForkJoinPool
- ForkJoin框架示例(一)
- ForkJoinPool分支合并框架 核心思想->代码演示
- java多线程 -- ForkJoinPool 分支/ 合并框架 工作窃取
- 使用阻塞队列批量导入与使用forkjoinPool框架的导入对比
- Java 多线程任务分解-ForkJoinPool(带返回值)示例
- Java 7 Fork/Join 并行计算框架概览
- Fork/Join框架之Fork、Join操作
- [转]Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
- java多线程之并行框架ForkJoin
- fork-join框架
- 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
- Java线程篇(十一):Fork/Join-Java并行计算框架
- Java7任务并行执行神器:Fork&Join框架
- zf框架的db类select查询器join链表使用示例(zend框架)
- Fork/Join框架及其性能介绍
- java fork-join框架应用和分析
- Java7之线程池ForkJoinPool