ArrayList出现线程不安全的现象
异常信息:
java.util.ConcurrentModificationException
导致原因:
一个正在写,另一个进行抢夺,导致数据不一致异常,并发修改异常
解决方案:
1.使用Vector
2.使用Collections类里面的synchronizedList(new ArrayList())
3.new CopyOnWriteArrayList() 写时复制
优化建议:
每次添加的时候都会加锁,把创建一个新的集合,长度比当前的+1,进行变量赋值,再把新的集合变成主集合(set)
写时复制:先把当前的集合复制(copy)到新的容器里面,然后往新的容器里面添加数据,添加数据之后,再将原来的引用指向新的容器。
好处是,在容器并发的读的话,不需要加锁,因为当前容器不会添加任何元素,所有copyAndWrite是一个写与读分离的思想