CopyonWriteArrayList

原创 2018年04月16日 15:41:30

CopyonWriteArrayList是java并发包中提供的一个类,基于写入时复制的思想。
普通的ArrayList或者Vector(虽然vector是线程安全的,但是复合操作不是,删除或者添加元素后,其结构发生了变化,modcount还是改变了,也会发生异常),如果有两个线程,一个线程进行iterator迭代显示,同时另外一个线程进行add或者reomve操作,则进行迭代显示的操作会报ConcurrentModificationException异常。说明普通的list在进行写操作时,其他的线程不能对此list进行迭代操作。
CopyonWriteArrayList在进行add或者remove(Object)操作时,先将此数组复制,然后对新数组进行操作,最后将原数组的指针指向新的数组。

    public boolean add(E e) {
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            Object[] elements = getArray();
            int len = elements.length;
            Object[] newElements = Arrays.copyOf(elements, len + 1);
            newElements[len] = e;
            setArray(newElements);
            return true;
        } finally {
            lock.unlock();
        }
    }

但是CopyonWriteArrayList也有问题:1、复制整个数组操作开销比较大; 2、数据的弱一致性问题,同时读写操作时,读的数据未必是最新的数据。
CopyonWriteArrayList适用于读多写少的情景。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Andyzhu_2005/article/details/79961500

CopyOnWriteArrayList的优点和缺点

CopyOnWriteArrayList的优点和缺点
  • lhl6688
  • lhl6688
  • 2015-02-27 15:49:43
  • 1016

CopyOnWriteArrayList的原理和使用方法

CopyOnWriteArrayList:CopyOnWriteArrayList这是一个ArrayList的线程安全的变体,其原理大概可以通俗的理解为:初始化的时候只有一个容器,很常一段时间,这个容...
  • hua631150873
  • hua631150873
  • 2016-05-03 16:59:09
  • 7277

CopyOnWriteArrayList的使用

除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的)。 先回顾一下一个常识: 1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用...
  • hsbirenjie
  • hsbirenjie
  • 2016-04-12 11:35:09
  • 1022

【JDK】:CopyOnWriteArrayList、CopyOnWriteArraySet 源码解析

CopyOnWriteArrayList
  • u011080472
  • u011080472
  • 2016-05-15 21:02:35
  • 628

CopyOnWriteArrayList 并发集合源码分析

在CopyOnWriteArrayList里处理写操作(包括add、remove、set等)是先将原始的数据通过JDK1.6的Arrays.copyof()来生成一份新的数组 然后在新的数据对象上进...
  • likailonghaha
  • likailonghaha
  • 2016-11-30 11:37:49
  • 724

并发编程6:CopyOnWriteArrayList 的写时复制

首先提个问题: - 线程安全的 List 集合有什么? - CopyOnWriteArrayList 的特点以及使用场景? 如果这个问题你答不上来,那这篇文章可能就对你有些价值...
  • u011240877
  • u011240877
  • 2017-08-20 09:58:06
  • 4048

深入Java集合系列之六:CopyOnWriteArrayList

CopyOnWriteArrayList简介CopyOnWriteArrayList容器是Collections.synchronizedList(List list)的替代方案,CopyOnWrit...
  • u011116672
  • u011116672
  • 2016-04-08 16:18:15
  • 3906

ArrayList,CopyOnWriteArrayList正确遍历方法

CopyOnWriteArrayList: public static void main(String[] args) { final List names = new Copy...
  • working_brain
  • working_brain
  • 2014-09-09 11:45:35
  • 1123

Vector与ArrayList与CopyOnWriteArrayList区别

1. Vector & ArrayList 1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步...
  • sxfda
  • sxfda
  • 2015-11-25 17:30:10
  • 2493

《Java源码分析》:CopyOnWriteArrayList/ CopyOnWriteArraySet

《Java源码分析》:CopyOnWriteArrayList/CopyOnWriteArraySetCopyOnWriteArrayList/CopyOnWriteArraySet的基本思想是一旦对...
  • u010412719
  • u010412719
  • 2016-08-04 20:34:22
  • 581
收藏助手
不良信息举报
您举报文章:CopyonWriteArrayList
举报原因:
原因补充:

(最多只允许输入30个字)