ArrayList在Java多线程中的应用
2017-08-17 00:00
197 查看
ArrayList是非线程安全的。
实现多线程:
正常的输出:
实际输出:
线程1和线程2修改了彼此的list。
线程1和线程2交叉运行输出:
实际测试结果:
以上是针对实际问题的2种解决方案,欢迎留言指正。
问题描述
开发中,存在这样的业务逻辑,类似倒金字塔结构,下层数据需要基于上层的数据进行逻辑计算。设计思路是:定义一个全局变量upLayerList,来保存上一层的数据。每一层计算仅需要知道upLayerList就可以,不用关心上一层数据怎么获取。当前层计算完毕后,把结果赋值给upLayerList,留给下一层使用。问题重现
模拟业务逻辑实现:实现多线程:
正常的输出:
Runner1 : [1, 2, 3] Runner2 : [4, 5, 6]
实际输出:
线程1和线程2修改了彼此的list。
解决方案1
使用同步关键字synchronized
线程1和线程2交叉运行输出:
解决方案2
传值,每一层都传upLayerList。实际测试结果:
其他解决方案
定义变量:uplayerList = Collections.synchronizedList(new ArrayList<>());,uplayerList 是线程安全的,但是后面对uplayerList 的操作不是线程安全的。需要对操作加同步关键字
synchronized。
扩展
ArrayList和Vector以及synchronizedList以上是针对实际问题的2种解决方案,欢迎留言指正。
相关文章推荐
- ArrayList在Java多线程中的应用
- Java多线程-----CopyOnWriteArrayList
- java基础应用之ArrayList
- java多线程与高并发库应用(一)线程基础概念
- Java多线程的synchronized应用
- java关键字volatile和synchronized在多线程中的应用
- Java核心技术学习---多线程,锁,同步,条件对象部分应用源码
- Java多线程与线程并发库高级应用笔记
- Java Arraylist应用
- Java多线程应用开发(二)
- 【多线程】应用Java多线程实例
- Java 多线程(二)线程间的通信应用--生产者消费者(未完)
- Java多线程与并发库高级应用-java5线程并发库
- Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList
- 【转】Java Executor框架在多线程应用中的使用
- Java 7之多线程并发容器 - CopyOnWriteArrayList
- Java 中的多线程-两种创建方式,定时器的应用,线程的安全问题可以用银行转账来说明
- java多线程之线程并发库条件阻塞Condition的应用
- JAVA多线程实现和应用总结
- Java多线程-- SynchronousQueue队列和 TransferQueue队列比较及应用