Java集合中快速失败机制"fail-fast"指什么呢?
下文笔者讲述java集合中快速失败机制的简介说明,如下所示
快速失败机制"fail-fast"简介说明
快速失败机制: java集合一种错误检测机制 当多个线程对集合进行结构上的改变时 有可能会产生 fail-fast 机制 ================================= 例: 假设存在两个线程(线程1、线程2), 线程1 通过Iterator在遍历集合A中的元素 在某个时候线程2修改了集合A的结构(结构上面的修改,而不是简单的修改集合元素的内容) 这个时候程序就会抛出 ConcurrentModificationException 异常,从而产生fail-fast机制。
快速失败的原因分析
原因分析: 迭代器在遍历时 Arraylist的父类AbstarctList中有一个modCount变量 每次对集合进行修改时都会modCount++ 而foreach的实现原理其实就是Iterator ArrayList的Iterator中有一个expectedModCount变量 该变量会初始化和modCount相等 每当迭代器使用hashNext()/next()遍历下一个元素之前 都会检测modCount的值和expectedmodCount的值是否相等 如果集合进行增删操作 modCount变量就会改变 就会造成expectedModCount!=modCount 此时就会抛出ConcurrentModificationException异常
fast-fail解决方法
在遍历过程中 所有涉及到改变modCount值的地方全部加上synchronized 使用CopyOnWriteArrayList来替换ArrayList
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。