ArrayList线程不安全及解决方案CopyOnWriteArrayList

ArrayList在多线程情况下,会报异常,ArrayList线程不安全基础篇:
https://blog.csdn.net/weixin_44774355/article/details/104417223
下面我们分析具体产生的原因,故障现象:
java.util.ConcurrentModificationException
导致原因:
一个线程在写的时候,另外一个线程来争夺,导致数据不一致
解决方案:
方案一:List list = new Vector<>();
方案二:List list = Collections.synchronizedList(new ArrayList<>());(前两种不建议用)
方案三:考虑java.util.concurrent包下的类CopyOnWriteArrayList,List list = new CopyOnWriteArrayList<>();
CopyOnWrite写时复制:是一种读写分离的思想
具体看CopyOnWriteArrayList源码:
ArrayList线程不安全及解决方案CopyOnWriteArrayList实现思想:当我们向集合中添加一个元素时,并不直接向Object[ ]数组中直接添加,而是将Object[ ]数组拷贝一个新的数组,向新的数组中添加元素,最后将原数组的引用指向新的数组。这样做的好处是可以实现并发的读,且不需要加锁,这样就实现了读和写使用的是不同的容器,实现读写分离思想。