java8新特性--并行流与串行流

举报
别团等shy哥发育 发表于 2023/02/04 17:01:52 2023/02/04
【摘要】 @toc 1、概述并行流就是把一个内容分成多个数据块,并用不同的线程分 别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并 行操作。Stream API 可以声明性地通过 parallel() 与 sequential() 在并行流与顺序流之间进行切换。 2、实例若我们需要计算从0到1000000000L的累计和,若是普通的从0加到1000000000L,势...

@toc

1、概述

并行流就是把一个内容分成多个数据块,并用不同的线程分 别处理每个数据块的流。
Java 8 中将并行进行了优化,我们可以很容易的对数据进行并 行操作。Stream API 可以声明性地通过 parallel() 与 sequential() 在并行流与顺序流之间进行切换。

2、实例

若我们需要计算从0到1000000000L的累计和,若是普通的从0加到1000000000L,势必对cpu的利用率不高,我们做个测试
1、普通的累加和:

long start = System.currentTimeMillis();
		
		long sum = 0L;
		
		for (long i = 0L; i <= 1000000000L; i++) {
			sum += i;
		}
		
		System.out.println(sum);
		
		long end = System.currentTimeMillis();
		
		System.out.println("耗费的时间为: " + (end - start));

在这里插入图片描述
2、采用并行流计算

long start = System.currentTimeMillis();
		Long sum1 = LongStream.rangeClosed(0L, 1000000000L)
							 .parallel()
							 .reduce(0,Long::sum);
		
		System.out.println(sum1);
		long end = System.currentTimeMillis();
		
		System.out.println("耗费的时间为: " + (end - start));

在这里插入图片描述

从结果来看,差距并不是很大,有时候并行流执行时间比普通的累计还长,是因为并行流执行的时候会递归将计算进行差分,最后再将拆分的结果合并,会消耗掉一部分时间。所以,可以增大数据量去测试,效果就会很明显。

加大数据量,计算从0到10000000000L
1、普通累加和:
在这里插入图片描述
2、并行流计算
在这里插入图片描述

可以看到,数据已经溢出了,但是我们观察消耗时间可以发现,数据量越大,并行流的优势越明显

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。