java8新特性--并行流与串行流
【摘要】 @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)