避坑 | Java8使用并行流(ParallelStream)注意事项
2024-10-19 14:53:36
示例分析
/**
* 避坑 | Java8使用并行流(ParallelStream)注意事项
*
* @author WH.L
* @date 2020/12/26 17:14
*/
public class TestParallelStream {
public static void main(String[] args) {
printFun();
}
public static void printFun() {
List<Integer> integersList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
integersList.add(i);
}
//普通集合 存储
List<Integer> parallelStorage = new ArrayList<>();
//同步集合 存储
List<Integer> parallelStorage2 = Collections.synchronizedList(new ArrayList<>());
//通过并行流存入普通集合parallelStorage中
integersList
.parallelStream()
.filter(i -> i % 2 == 0)
.forEach(i -> parallelStorage.add(i));
System.out.println("开始打印普通集合parallelStorage");
parallelStorage
.stream()
.forEachOrdered(e -> System.out.print(e + " "));
System.out.println();
System.out.print("------------------------------------");
System.out.println();
//通过并行流存入同步集合parallelStorage2中
integersList
.parallelStream()
.filter(i -> i % 2 == 0)
.forEach(i -> parallelStorage2.add(i));
System.out.println("开始打印同步集合parallelStorage");
parallelStorage2
.stream()
.forEachOrdered(e -> System.out.print(e + " "));
}
}
运行结果如下图
问题与分析
1.为什么parallelStorage的数量不固定(正确的应该是50个)?
2.为什么parallelStorage会有null元素?
其实我们可以认为ArrayList内部维护了一个数组Arr其定义一个变量 n用以表式这个数组的大小那么向这个ArrayList中存储数据的过程可以分解为这么几步:
1.读取数组的长度存入n
2.向这个数组中储入元素arr[n]=a
3.将n+1
4.保存n
而对于parrallelStorage元素数量不固定的原因就是多线程有可能同时读取到相同的下标n同时赋值,这样就会出现元素缺失的问题了。
项目实战
根据时间段拉取美团订单时,我们先间隔20分钟去分割时间,然后通过一个同步集合去存储并行流中查询回来的美团订单。
好文
Collections.synchronizedList()方法实例
希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。
扫描下方二维码关注我,您会收到更多优质文章推送。
最新文章
- java compiler level does not match the version of the installed java project facet 解决方案
- Arcgis SDE10.1 和 Arcgis server10.1的授权文件license
- Android Studio新建了一个项目提示Error:Unable to start the daemon process
- 使用Architecture Explorer分析应用程序及使用层次图
- Expectation maximization - EM算法学习总结
- 在同一上机器上建立两个SVN服务
- 利用CSS3选择器定制checkbox和radio
- 射频识别技术漫谈(29)——射频接口芯片TRF7960
- 解析汽车B2C商城网站四种盈利模式
- Laravel的console使用方法
- 增强遍历和Object多参数遍历
- [LeetCode] Set Intersection Size At Least Two 设置交集大小至少为2
- 【matlab编程】matlab随机数函数
- JavaScript正则表达式基础
- 【shell实例】定时21:00-21:05,循环调用DSQL脚本,其它时段自动退出
- postgre dinstinct on()的使用
- 我们一起踩过的坑----react(antd)(二)
- hdu2609 How many【最小表示法】【Hash】
- JQuery UI之Autocomplete(4)多值输入、远程缓存与组合框
- English trip -- Phonics 5 元音字母 o
热门文章
- buu学习记录(下)(做题是不可能做题的)
- 代码审计【根据功能点定向审计】BugFree ZSWin重装案例
- hihocoder 1489(微软2017, 数学,模拟)
- Day7 【Scrum 冲刺博客】
- CSS基础-Flexbox
- 响应式网站css reset
- day106:MoFang:BUG:获取数据验证token是否过期&;相册/相机取消头像无法显示&;MongoDB
- curl使用技巧汇总
- mybatis默认返回类型
- ORA-28017: The password file is in the legacy format