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注意:
这里异常的抛出条件