Java集合中快速失败机制"fail-fast"指什么呢?

欣喜 Java经验 发布时间:2023-12-29 09:43:34 阅读数:17667 1
下文笔者讲述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
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202312/17038142547604.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者