首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >parallelStream

parallelStream

作者头像
阿超
发布2022-08-16 20:32:38
发布2022-08-16 20:32:38
56000
代码可运行
举报
文章被收录于专栏:快乐阿超快乐阿超
运行总次数:0
代码可运行

我又愿中国青年只是向上走,不必理会这冷笑和暗箭。——鲁迅

我们在开发中经常使用stream去处理我们的集合

这里分享一个并行流:parallelStream

它可以允许我们的声明式编程以多线程并行的方式执行

首先我们可以比较一下性能

代码语言:javascript
代码运行次数:0
运行
复制
List<Integer> list = new SecureRandom().ints().limit(10000000).boxed().collect(Collectors.toList());

long startTime = System.nanoTime();
// 求和操作
int sum = list.stream().mapToInt(Integer::intValue).reduce(0, Integer::sum);
System.out.println("普通stream求和结果:" + sum);
long normalStreamEndTime = System.nanoTime();

System.out.println("普通stream耗时:" + ((normalStreamEndTime - startTime) / (1000.0 * 1000.0)) + " ms");
// 求和操作
int parallelSum = list.parallelStream().mapToInt(Integer::intValue).reduce(0, Integer::sum);
System.out.println("parallelStream求和结果:" + parallelSum);
long parallelStreamEndTime = System.nanoTime();
System.out.println("parallelStream耗时:" + ((parallelStreamEndTime - normalStreamEndTime) / (1000.0 * 1000.0)) + " ms");

实验结果

可以明显看到我们的并行流parallelStream性能远超stream,那它性能这么好,为啥不直接使用parallelStream呢?

其实并行流也是有代价的

它会存在线程安全问题,并且它的执行是无序的

这里举个例子

我们在源代码上加上给lastValue设置值这样一个操作

可以明显看到两者不一致

如果还没get到,我们还可以直接打印元素,看看顺序,这里我把元素改少一点

然后再把打印语句放到mapToInt里面去

现在总发现两者顺序不一致了吧

所以要根据场合进行灵活应用,明天我将继续深入并行流中的其中一种特性

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档