java的并发修改异常ConcurrentModificationException

本文深入解析了快速失败(Fail-Fast)机制,当线程在迭代过程中遇到集合被其他线程修改的情况,会抛出ConcurrentModificationException异常,避免了数据不一致的问题。文章提供了规避异常的策略,即使用Iterator对象的remove()方法代替集合对象的remove()方法。

快速失败(Fail-Fast)机制:对于线程不安全的集合对象的迭代器,如果在使用迭代器的过程中有其他线程修改了集合对象结构或者元素数量,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。

在对集合使用iterator进行遍历的同时,如果直接调用集合对象的相关方法对其进行修改,如删除等操作时,会报ConcurrentModificationException异常。原因是通过集合对象调用其remove(xxx)等方法进行修改时,会导致modCount和expectedModCount的值不一致。然后在循环执行hashNext()方法时,就会检测到这种不一致然后抛异常。

为了避免这种异常,一种简单的操作是不使用集合对象.remove(xxx)的方法进行删除,而是用Iterator对象.remove()的方式删除。

 

具体分析可以参考这篇文章:https://www.cnblogs.com/dolphin0520/p/3933551.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值