ArrayList是非线程安全的。
开发中,存在这样的业务逻辑,类似倒金字塔结构,下层数据需要基于上层的数据进行逻辑计算。设计思路是:定义一个全局变量upLayerList,来保存上一层的数据。每一层计算仅需要知道upLayerList就可以,不用关心上一层数据怎么获取。当前层计算完毕后,把结果赋值给upLayerList,留给下一层使用。
模拟业务逻辑实现:
实现多线程:
正常的输出:
Runner1 : [1, 2, 3]
Runner2 : [4, 5, 6]
实际输出:
线程1和线程2修改了彼此的list。
使用同步关键字synchronized
线程1和线程2交叉运行输出:
传值,每一层都传upLayerList。
实际测试结果:
定义变量:uplayerList = Collections.synchronizedList(new ArrayList<>());
,uplayerList 是线程安全的,但是后面对uplayerList 的操作不是线程安全的。需要对操作加同步关键字synchronized
。
ArrayList和Vector以及synchronizedList
以上是针对实际问题的2种解决方案,欢迎留言指正。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有