040_并发下集合类不安全


并发下 ArrayList 不安全

:::info
并发修改异常 java.util.ConcurrentModificationException
:::
image.png
image.png
:::info
并发修改异常 java.util.ConcurrentModificationException
原因:ArrayList的add()方法是线程不安全的
:::
image.png
image.png

解决方案一:Vector(不推荐使用)

image.png
image.png
:::info
分析:Vector的add()方法是同步方法,线程安全
:::
image.png

解决方案二:Collections.synchronizedList()

image.png
image.png

解决方案三:CopyOnWriteArrayList(推荐使用)

image.png
image.png
image.png
:::info
分析:CopyOnWriteArrayList的add()方法中使用了lock锁,线程安全
CopyOnWrite 写入时复制,简写为COW,计算机程序设计领域的一种优化策略
多线程情况下使用list,读取时,是固定的,写入时,存在覆盖操作
使用CopyOnWriteArrayList,会避免覆盖操作的情况,因为:代码块使用lock锁加锁,先创建拷贝新数组,再变量指向新数组,中间时间,如果有线程读取list,读取的还是原来的list
:::
image.png

并发下 HashSet 不安全

:::info
并发修改异常 java.util.ConcurrentModificationException
:::
image.png
image.png

解决方案一:Collections.synchronizedSet()

image.png

image.png

解决方案二:CopyOnWriteArraySet(推荐使用)

image.png
image.png

并发下 HashMap 不安全

:::info
并发修改异常 java.util.ConcurrentModificationException
:::
image.png
image.png

解决方案一:Collections.synchronizedMap()

解决方案二:ConcurrentHashMap

image.png
image.png
image.png

posted @   清风(学习-踏实)  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示