设为首页 加入收藏

TOP

【Java深入研究】4、fail-fast机制(七)
2017-10-13 10:03:49 】 浏览:8408
Tags:Java 深入 研究 fail-fast 机制
nbsp;          throw new NoSuchElementException();  
  •             return this.snapshot[(this.cursor++)];  
  •         }  
  •   
  •         /** 省略此处代码 */  
  •     }  
  •  

            CopyOnWriterArrayList的方法根本就没有像ArrayList中使用checkForComodification方法来判断expectedModCount 与 modCount 是否相等。它为什么会这么做,凭什么可以这么做呢?我们以add方法为例:

     

    [java]  view plain  copy
     
    1. public boolean add(E paramE) {  
    2.         ReentrantLock localReentrantLock = this.lock;  
    3.         localReentrantLock.lock();  
    4.         try {  
    5.             Object[] arrayOfObject1 = getArray();  
    6.             int i = arrayOfObject1.length;  
    7.             Object[] arrayOfObject2 = Arrays.copyOf(arrayOfObject1, i + 1);  
    8.             arrayOfObject2[i] = paramE;  
    9.             setArray(arrayOfObject2);  
    10.             int j = 1;  
    11.             return j;  
    12.         } finally {  
    13.             localReentrantLock.unlock();  
    14.         }  
    15.     }  
    16.   
    17.       
    18.     final void setArray(Object[] paramArrayOfObject) {  
    19.         this.array = paramArrayOfObject;  
    20.     }  

     

            CopyOnWriterArrayList的add方法与ArrayList的add方法有一个最大的不同点就在于,下面三句代码:

     

    [java]  view plain  copy
     
    1. Object[] arrayOfObject2 = Arrays.copyOf(arrayOfObject1, i + 1);  
    2. arrayOfObject2[i] = paramE;  
    3. setArray(arrayOfObject2);  

     

            就是这三句代码使得CopyOnWriterArrayList不会抛ConcurrentModificationException异常。他们所展现的魅力就在于copy原来的array,再在copy数组上进行add操作,这样做就完全

    首页 上一页 4 5 6 7 下一页 尾页 7/7/7
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇【算法】1、快速排序 下一篇【Java深入研究】4、fail-fast机制

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目