Java 安全失败和快速失败 ﹏ヽ暗。殇╰゛Y 2021-10-19 03:12 279阅读 0赞 ### 文章目录 ### * 1.快速失败 * * 1.1 什么是快速失败 * 1.2 快速失败的原理 * 1.3 快速失败的解决方法 * 2.安全失败 * * 2.1 什么是安全失败 * 2.2 安全失败的原理 * 3.快速失败和安全失败的区别 # 1.快速失败 # ## 1.1 什么是快速失败 ## 快速失败(fail-fast),是指在使用迭代器遍历一个集合的时候,如果在它遍历的过程中对它的内容进行修改、增加、删除,那么就会抛出`Concurrent Modification Exception`异常。 ## 1.2 快速失败的原理 ## 在调用 `next()` 和 `remove()`时,会先进入一个方法中判断:如果 modCount 不等于 expectedModCount,则抛出`ConcurrentModificationException`异常 ## 1.3 快速失败的解决方法 ## * 使用iterator操作 * 将ArrayList替换成java.util.concurrent包下对应的类 # 2.安全失败 # ## 2.1 什么是安全失败 ## 安全失败(fail-fast),是指在遍历的时候不会直接在集合内容上访问,而是先复制一遍里面的内容,在重新拷贝一份新的集合内容输出,输出的结果是原来的值,所有不会报异常,并且会正常输出。 ## 2.2 安全失败的原理 ## 就是将原始值里面的内容拷贝一份到数组中,这样的话原始值的数据改变了,拷贝里面的数据也不会改变 # 3.快速失败和安全失败的区别 # * fail-fast继承的接口是AbstractList,fail-safe继承的接口是List * 一般推荐使用fail-safe安全失败
还没有评论,来说两句吧...