设为首页 加入收藏

TOP

【Java深入研究】4、fail-fast机制(五)
2017-10-13 10:03:49 】 浏览:5759
Tags:Java 深入 研究 fail-fast 机制
sp;        return;  
  •             throw new ConcurrentModificationException();  
  •         }  
  •     }  
  •  

            从上面的源代码我们可以看出,迭代器在调用next()、remove()方法时都是调用checkForComodification()方法,该方法主要就是检测modCount == expectedModCount ? 若不等则抛出ConcurrentModificationException 异常,从而产生fail-fast机制。所以要弄清楚为什么会产生fail-fast机制我们就必须要用弄明白为什么modCount != expectedModCount ,他们的值在什么时候发生改变的。

            expectedModCount 是在Itr中定义的:int expectedModCount = ArrayList.this.modCount;所以他的值是不可能会修改的,所以会变的就是modCount。modCount是在 AbstractList 中定义的,为全局变量:

     

    [java]  view plain  copy
     
    1. protected transient int modCount = 0;  

     

    那么他什么时候因为什么原因而发生改变呢?请看ArrayList的源码:

     

    [java]  view plain  copy
     
    1. public boolean add(E paramE) {  
    2.     ensureCapacityInternal(this.size + 1);  
    3.     /** 省略此处代码 */  
    4. }  
    5.   
    6. private void ensureCapacityInternal(int paramInt) {  
    7.     if (this.elementData == EMPTY_ELEMENTDATA)  
    8.         paramInt = Math.max(10, paramInt);  
    9.     ensureExplicitCapacity(paramInt);  
    10. }  
    11.   
    12. private void ensureExplicitCapacity(int paramInt) {  
    13.     this.modCount += 1;    //修改modCount  
    14.     /** 省略此处代码 */  
    15. }  
    16.   
    17. ublic boolean remove(Object paramObject) {  
    18.     int i;  
    19.     if (paramObject == null)  
    20.         for (i = 0; i < this.size; ++i) {  
    21.             if (this.elementData[i] != null)  
    22.                 continue;  
    23.             fastRemove(i);  
    24.             return true;  
    25.         }  
    26.     else  
    27.         for (i = 0; i < this.size; ++i) {  
    28.             if (!(paramObject.
    首页 上一页 2 3 4 5 6 7 下一页 尾页 5/7/7
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇【Java深入研究】4、fail-fast机制 下一篇【Java基础】4、java中的内部类

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目