Java 7之多线程并发容器 - CopyOnWriteArrayList(二)

2014-11-24 02:38:17 · 作者: · 浏览: 4
uppressWarnings("unchecked") public E next() { if (! hasNext()) throw new NoSuchElementException(); return (E) snapshot[cursor++]; } @SuppressWarnings("unchecked") public E previous() { if (! hasPrevious()) throw new NoSuchElementException(); return (E) snapshot[--cursor]; } public int nextIndex() { return cursor; } public int previousIndex() { return cursor-1; } public void remove() { throw new UnsupportedOperationException(); } public void set(E e) { throw new UnsupportedOperationException(); } public void add(E e) { throw new UnsupportedOperationException(); } } 如上容器的迭代器中会保存一个不可变的Object数组对象,那么在进行遍历这个对象时就不需要再进一步的同步。在每次修改时,都会创建并重新发布一个新的窗口副本,从而实现了可变性。如上迭代器代码中保留了一个指向volatile数组的引用,由于不会被修改,因此多个线程可以同时对它进行迭代,而不会彼此干扰或与修改容器的线程相互干扰。 与之前的ArrayList实现相比,CopyOnWriteArrayList返回迭代器不会抛出ConcurrentModificationException异常,即它不是fail-fast机制的!