JDK8-并行流与串行流(七)
来源:互联网 发布:linux安装git服务器 编辑:程序博客网 时间:2024/05/22 00:52
package cn.wcj.jdk8.lambda.test;import java.util.concurrent.RecursiveTask;/** * * <p>Title:ForkJoinCalc </p>* <p>Description:ForkJoin框架并行计算 </p>* <p>Company:Software College </p> * @author SuccessKey(WangCJ)* @date 2017年6月20日 下午7:12:09 */public class ForkJoinCalc extends RecursiveTask<Long>{ private static final long serialVersionUID = 8897912131234L; private Long start ; private Long end ; private static final long THRESHOLD = 10000L; //临界值 public ForkJoinCalc() {} public ForkJoinCalc(Long start, Long end) { this.start = start; this.end = end; } @Override protected Long compute() { Long len=end-start ; if(len<=THRESHOLD){ Long sum=0L ; for(Long x=start;x<=end;x++) sum+=x ; return sum ; }else{ Long middle=(start+end)/2 ; ForkJoinCalc left=new ForkJoinCalc(start, middle); left.fork() ; //拆分,并将该子任务压入线程队列 ForkJoinCalc right=new ForkJoinCalc(middle, end) ; right.fork() ; return left.join()+right.join() ; } }}
package cn.wcj.jdk8.lambda.test;import static org.junit.Assert.*;import java.util.OptionalLong;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.stream.LongStream;import org.junit.Test;/** * * <p>Title:ForkJoinTest </p>* <p>Description:并行计算测试 </p>* <p>Company:Software College </p> * @author SuccessKey(WangCJ)* @date 2017年6月20日 下午7:20:06 */public class ForkJoinTest { @Test public void test1() { long start = System.currentTimeMillis() ; ForkJoinPool pool = new ForkJoinPool(); ForkJoinTask<Long> task = new ForkJoinCalc(0L,10000000000L) ; Long sum=pool.invoke(task) ; System.out.println(sum); long end = System.currentTimeMillis() ; System.out.println("耗时:"+(end-start)) ; //79248 } @Test public void test2(){ long start = System.currentTimeMillis() ; Long sum=0L; for (long i = 0L; i <= 10000000000L; i++) { sum+=i ; } System.out.println(sum); long end = System.currentTimeMillis() ; System.out.println("耗时:"+(end-start)) ; //70002 } @Test public void test3(){ long start = System.currentTimeMillis() ; OptionalLong reduce = LongStream.range(0L, 10000000000L) .parallel() .reduce(Long::sum) ; System.out.println(reduce.getAsLong()); long end = System.currentTimeMillis() ; System.out.println("耗时:"+(end-start)) ; //6212 }}
阅读全文
0 0
- JDK8-并行流与串行流(七)
- jdk8并行流
- jdk8-Collector收集器之并行流陷阱与原理
- JAVA8新特性[第五季]-并行流与串行流
- 串行与并行
- 串行与并行
- 串行与并行
- “串行硬盘”与“并行硬盘”
- 嵌入式 串行与并行传输
- 串行乘法与并行乘法
- 串行除法与并行除法
- 串行通信与并行通信
- 串行与并行调度总结(细粒度串行粗粒度并行)
- Java8 串行流和并行流的执行效率比较
- 串行与并行、同步和异步串行通信
- 串行通信与并行通信的区别
- 串行硬盘与并行硬盘的区别
- 串行通讯与并行通讯区别
- win8安装虚拟机导致电脑一直重启解决办法
- MySQL触发器-条件触发器语法
- 04-基本的增删改查
- 实战java高并发程序设计读书笔记:java 线程池
- jsp总结2
- JDK8-并行流与串行流(七)
- 终于等到你 -- 北京理工大学考研复试小记
- 声明:本人大学生,技术能力不高,不喜勿喷,请以学习的态度看帖。
- JSP状态管理
- 博客入坑。。。
- Java数据结构算法实现
- python捕获ctrl+c手工中断程序的两种方法
- NIO学习笔记——缓冲区(Buffer)详解
- 枚举