目录
并发下 ArrayList 不安全
:::info
并发修改异常 java.util.ConcurrentModificationException
:::
:::info
并发修改异常 java.util.ConcurrentModificationException
原因:ArrayList的add()方法是线程不安全的
:::
解决方案一:Vector(不推荐使用)
:::info
分析:Vector的add()方法是同步方法,线程安全
:::
解决方案二:Collections.synchronizedList()
解决方案三:CopyOnWriteArrayList(推荐使用)
:::info
分析:CopyOnWriteArrayList的add()方法中使用了lock锁,线程安全
CopyOnWrite 写入时复制,简写为COW,计算机程序设计领域的一种优化策略
多线程情况下使用list,读取时,是固定的,写入时,存在覆盖操作
使用CopyOnWriteArrayList,会避免覆盖操作的情况,因为:代码块使用lock锁加锁,先创建拷贝新数组,再变量指向新数组,中间时间,如果有线程读取list,读取的还是原来的list
:::
并发下 HashSet 不安全
:::info
并发修改异常 java.util.ConcurrentModificationException
:::
解决方案一:Collections.synchronizedSet()
解决方案二:CopyOnWriteArraySet(推荐使用)
并发下 HashMap 不安全
:::info
并发修改异常 java.util.ConcurrentModificationException
:::