fail-fast机制(快速失败)与fail-safe(安全失败)

本文详细介绍了Java集合框架中的fail-fast(快速失败)和fail-safe(安全失败)机制。fail-fast机制在单线程和多线程情况下可能会抛出`ConcurrentModificationException`,而fail-safe则通过复制集合内容来避免此类异常,但无法获取遍历期间的集合修改。在Java.util和java.util.concurrent包下的容器分别遵循这两种机制。
摘要由CSDN通过智能技术生成
fail-fast机制(快速失败):

ConcurrentModificationException发生在Collection集合使用迭代器遍历时,使用了集合类提供的修改(增加、删除)集合内容方法报错,或者由于多线程操作导致。

1.单线程情况
  • modCount表示当前集合修改的次数,也可以认为是实际对象的个数。
  • ecpectedModCount是迭代器记录当前集合的修改次数。
1.1抛出上述异常的主要原因:

当调用容器的iterator()方法返回Iterator对象时,把容器中包含对象的个数赋值给了一个变量(ecpectedModCount = modCount),在调用next()方法时会比较ecpectedModCount 与modCount的值是否相等,若二者不相等,则会抛出该异常。

1.2解决方法:

在遍历过程中把需要删除的对象保存到一个集合中,等遍历结束后再调用removeAll()方法来删除,或者使用iterator.remove()方法。

1.3意义:

快速失败策略保证了所有用户在进行迭代遍历集合时,拿到的数据一定时最新的数据。(避免“脏读”产生)

1.4注意:

这里异常的抛出条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值