java+串行和并行的区别_Java8新特性_并行流与串行流
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新特性_并行流与串行流相关推荐
- java获取时间的各种风格_Java8新特性之新日期API
早期的日期 API 在早期也就是 Java 8 之前,JDK 原生比较有名的有两个类: Date 类 Calendar 类 这两个类相对来说用起来是比较困难的,之前我们往往是用的第三方的库. 新日期 ...
- java8 list切片_Java8新特性_创建 Stream、流筛选与切片
package com.atguigu.java8; import java.util.ArrayList; import java.util.Arrays; import java.util.Ite ...
- java8 重复注解_Java8新特性_重复注解与类型注解
1.总结 1.忘记注解上该写什么时,可以随意写一个注解然后点击进去参考.复制 2.默认情况下不支持重复注解,需要定义容器 3.标注注解为@Repeatable 4.若需要获取注解的值,可以通过反射获取 ...
- Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java10 的新特性
你好,我是看山. 本文收录在 <从小工到专家的 Java 进阶之旅> 系列专栏中. 从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证 ...
- 如约而至,Java 10 正式发布:包含 109 项新特性
如约而至,Java 10 正式发布:包含 109 项新特性 期待已久,没有跳票的 Java 10 已正式发布!你可以通过这里下载 Java 10 正式版. 此前我们曾报道过,为了更快地迭代,以及跟进社 ...
- 尚硅谷Java入门视频教程第十七章——Java9Java10Java11新特性
尚硅谷Java入门视频教程第十七章--Java9&Java10&Java11新特性 第17章:Java9&Java10&Java11新特性 17.1 Java 9 的新 ...
- Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java12 的新特性
本文收录在 <从小工到专家的 Java 进阶之旅> 系列专栏中. 你好,我是看山. 从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证 ...
- Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java13 的新特性
你好,我是看山. 本文收录在 <从小工到专家的 Java 进阶之旅> 系列专栏中. 从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证 ...
- Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java11 的新特性
文章目录 概述 增强 String repeat strip.stripLeading.stripTrailing isBlank lines 增强文件读写 增强集合的数组操作 增强函数 Predic ...
最新文章
- java窗口课程_课程登记窗口java
- mysql从节点放家里_添加MySQL 5.6 从节点 Slave
- 第四节:HTML5给表单带来的新标签、新属性、新类型
- centos7 搭建本地git_小白也能看懂,30 分钟搭建个人博客!
- Cucumber常用关键字
- 基于隐式调用风格的kwic实现
- 135编辑器的html,135编辑器
- 微信emoji表情包存入数据库报错处理
- 发票查验API给财务工作带来了哪些便利?
- Oracle修改expired状态,更改ORACLE 用户的 expired状态
- 攻防世界-web-mfw
- Vmware中Linux 虚拟终端之间 无法切换 解决方法
- centos yum清华镜像
- 分类---逻辑回归(二分类)
- MySQL主外键设置
- 字节跳动 面试 复盘 回顾 2021 过客局
- java 图片互转_JAVA 图片格式转换 jpg、jpeg、png格式互转
- 这是一款可以批量压缩图片的软件
- Ceph mimic
- matlab牛顿解方程,牛顿迭代法解非线性方程matlab实现
热门文章
- cpu超频软件_Easy OC,装机小白进阶大神的好用软件
- python 百度搜索结果_Python洗涤百度搜索结果
- 如何在局域网搭建php网站,【自己网站搭建】如何使用本地计算机,建立本地网站?怎样才能让局域网上的人都能访问到我电脑上的本地网站?...
- python画六角图_六角图的画法
- python程序加密_Python简单的加密程序:如何循环Z回到A
- matlab怎么复制相同的列,怎样将数组中某一列数据相同的行提取出来?
- ~~spfa 算法(队列优化的Bellman-Ford算法)(附模板题)
- 南溪的远程桌面软件使用笔记
- 自动驾驶系统的学习笔记
- Android中使用FragmentManager获得控件