java
2021-06-12
2021-06-12
我又愿中国青年只是向上走,不必理会这冷笑和暗箭。——鲁迅
我们在开发中经常使用stream
去处理我们的集合
这里分享一个并行流:parallelStream
它可以允许我们的声明式编程以多线程并行的方式执行
首先我们可以比较一下性能
1 | List<Integer> list = new SecureRandom().ints().limit(10000000).boxed().collect(Collectors.toList()); |
实验结果
可以明显看到我们的并行流parallelStream
性能远超stream
,那它性能这么好,为啥不直接使用parallelStream
呢?
其实并行流也是有代价的
它会存在线程安全问题,并且它的执行是无序的
这里举个例子
我们在源代码上加上给lastValue
设置值这样一个操作
可以明显看到两者不一致
如果还没get
到,我们还可以直接打印元素,看看顺序,这里我把元素改少一点
然后再把打印语句放到mapToInt
里面去
现在总发现两者顺序不一致了吧
所以要根据场合进行灵活应用,明天我将继续深入并行流中的其中一种特性