集合类不安全之并发修改异常:java.util.ConcurrentModificationException,高并发多线程访问下的常见异常

本文深入探讨了ArrayList、HashSet和HashMap等集合类在线程并发环境下的安全性问题,分析了线程不安全的原因及可能引发的ConcurrentModificationException异常。并提供了多种解决方案,包括使用Vector、CopyOnWrite系列集合以及通过Collections工具类实现线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayList线程不安全的原因是其中的add方法没有加锁

  1. 故障现象:java.util.ConcurrentModificationException
  2. 导致原因:并发争抢修改导致,参考花名册签名情况,一个人正在写,另一个同学过来抢夺,导致数据不一致异常。并发修改异常。
  3. 解决方案:
    1. 用Vector
    2.  Collections.synchronizedList(new ArrayList<>();
    3.  new CopyOnWriteArrayList<>();

 

 

Set线程不安全问题

       解决方案:

    1.   Collections.synchronizedSet(new ArraySet<>();
    2.  new CopyOnWriteArraySet<>();

HashSet底层数据结构Hash Map,但是Set中填一个值Map中填两个值原因是HashSet的add方法调用HashMap的put方法,但是add方法中添加的值是put中的K,V是一个PRECENT常量

Map线程不安全问题:

       解决方案:

5.1   Collections.synchronizedSet(new HashMap<>();

         5.2 new CopyOnWriteHashMap<>();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值