1、Java8中forkjoin框架使用更加简单了

1.7中的ForkJoin框架编码复杂且容易出错,而8中的编码则十分简单

JDK1.7时开发者需要自定义计算类,如

package com.atguigu.java8;

import java.util.concurrent.RecursiveTask;

public class ForkJoinCalculate extends RecursiveTask{

/**

*

*/

private static final long serialVersionUID = 13475679780L;

private long start;

private long end;

private static final long THRESHOLD = 10000L; //临界值

public ForkJoinCalculate(long start, long end) {

this.start = start;

this.end = end;

}

@Override

protected Long compute() {

long length = end - start;

if(length <= THRESHOLD){

long sum = 0;

for (long i = start; i <= end; i++) {

sum += i;

}

return sum;

}else{

long middle = (start + end) / 2;

ForkJoinCalculate left = new ForkJoinCalculate(start, middle);

left.fork(); //拆分,并将该子任务压入线程队列

ForkJoinCalculate right = new ForkJoinCalculate(middle+1, end);

right.fork();

return left.join() + right.join();

}

}

}

J8示例

package com.atguigu.java8;

import java.util.concurrent.ForkJoinPool;

import java.util.concurrent.ForkJoinTask;

import java.util.stream.LongStream;

import org.junit.Test;

public class TestForkJoin {

@Test

public void test1(){

long start = System.currentTimeMillis();

ForkJoinPool pool = new ForkJoinPool();

ForkJoinTask task = new ForkJoinCalculate(0L, 10000000000L);

long sum = pool.invoke(task);

System.out.println(sum);

long end = System.currentTimeMillis();

System.out.println("耗费的时间为: " + (end - start)); //112-1953-1988-2654-2647-20663-113808

}

@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)); //34-3174-3132-4227-4223-31583

}

@Test

public void test3(){

long start = System.currentTimeMillis();

Long sum = LongStream.rangeClosed(0L, 10000000000L)

.parallel()

.sum();

System.out.println(sum);

long end = System.currentTimeMillis();

System.out.println("耗费的时间为: " + (end - start)); //2061-2053-2086-18926

}

}

java+串行和并行的区别_Java8新特性_并行流与串行流相关推荐

  1. java获取时间的各种风格_Java8新特性之新日期API

    早期的日期 API 在早期也就是 Java 8 之前,JDK 原生比较有名的有两个类: Date 类 Calendar 类 这两个类相对来说用起来是比较困难的,之前我们往往是用的第三方的库. 新日期 ...

  2. java8 list切片_Java8新特性_创建 Stream、流筛选与切片

    package com.atguigu.java8; import java.util.ArrayList; import java.util.Arrays; import java.util.Ite ...

  3. java8 重复注解_Java8新特性_重复注解与类型注解

    1.总结 1.忘记注解上该写什么时,可以随意写一个注解然后点击进去参考.复制 2.默认情况下不支持重复注解,需要定义容器 3.标注注解为@Repeatable 4.若需要获取注解的值,可以通过反射获取 ...

  4. Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java10 的新特性

    你好,我是看山. 本文收录在 <从小工到专家的 Java 进阶之旅> 系列专栏中. 从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证 ...

  5. 如约而至,Java 10 正式发布:包含 109 项新特性

    如约而至,Java 10 正式发布:包含 109 项新特性 期待已久,没有跳票的 Java 10 已正式发布!你可以通过这里下载 Java 10 正式版. 此前我们曾报道过,为了更快地迭代,以及跟进社 ...

  6. 尚硅谷Java入门视频教程第十七章——Java9Java10Java11新特性

    尚硅谷Java入门视频教程第十七章--Java9&Java10&Java11新特性 第17章:Java9&Java10&Java11新特性 17.1 Java 9 的新 ...

  7. Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java12 的新特性

    本文收录在 <从小工到专家的 Java 进阶之旅> 系列专栏中. 你好,我是看山. 从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证 ...

  8. Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java13 的新特性

    你好,我是看山. 本文收录在 <从小工到专家的 Java 进阶之旅> 系列专栏中. 从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证 ...

  9. Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java11 的新特性

    文章目录 概述 增强 String repeat strip.stripLeading.stripTrailing isBlank lines 增强文件读写 增强集合的数组操作 增强函数 Predic ...

最新文章

  1. java窗口课程_课程登记窗口java
  2. mysql从节点放家里_添加MySQL 5.6 从节点 Slave
  3. 第四节:HTML5给表单带来的新标签、新属性、新类型
  4. centos7 搭建本地git_小白也能看懂,30 分钟搭建个人博客!
  5. Cucumber常用关键字
  6. 基于隐式调用风格的kwic实现
  7. 135编辑器的html,135编辑器
  8. 微信emoji表情包存入数据库报错处理
  9. 发票查验API给财务工作带来了哪些便利?
  10. Oracle修改expired状态,更改ORACLE 用户的 expired状态
  11. 攻防世界-web-mfw
  12. Vmware中Linux 虚拟终端之间 无法切换 解决方法
  13. centos yum清华镜像
  14. 分类---逻辑回归(二分类)
  15. MySQL主外键设置
  16. 字节跳动 面试 复盘 回顾 2021 过客局
  17. java 图片互转_JAVA 图片格式转换 jpg、jpeg、png格式互转
  18. 这是一款可以批量压缩图片的软件
  19. Ceph mimic
  20. matlab牛顿解方程,牛顿迭代法解非线性方程matlab实现

热门文章

  1. cpu超频软件_Easy OC,装机小白进阶大神的好用软件
  2. python 百度搜索结果_Python洗涤百度搜索结果
  3. 如何在局域网搭建php网站,【自己网站搭建】如何使用本地计算机,建立本地网站?怎样才能让局域网上的人都能访问到我电脑上的本地网站?...
  4. python画六角图_六角图的画法
  5. python程序加密_Python简单的加密程序:如何循环Z回到A
  6. matlab怎么复制相同的列,怎样将数组中某一列数据相同的行提取出来?
  7. ~~spfa 算法(队列优化的Bellman-Ford算法)(附模板题)
  8. 南溪的远程桌面软件使用笔记
  9. 自动驾驶系统的学习笔记
  10. Android中使用FragmentManager获得控件