首页 > 其他分享 >CopyOnWriteArrayList

CopyOnWriteArrayList

时间:2023-02-15 15:45:45浏览次数:50  
标签:elements lock Object len CopyOnWriteArrayList 数组

底层

  1. 首先 CopyOnWriteArrayList内部也是通过数组来实现的,在向 CopyOnWriteArrayList 添加元素时,会复制一个新的数组,写操作在新数组上进行,读操作在原数组上进行
  2. 并且,写操作会加锁,防止出现并发写入丢数据的问题
  3. 写操作结束之后会把原数组指向新数组
  4. CopyOnWriteArrayList允许在写操作时来读取数据,大大提高了读的性能,因此适合读多写少的应用场景,但是CopyOnWriteArrayList会比较占内存,同时可能读到的数据并不是实时更新的最新数据,所以不适合实时性要求很高的场景

源码

 public boolean add(E e) {
        //加锁
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
             //获取原数组
            Object[] elements = getArray();
            //原数组长度
            int len = elements.length;
            //复制一个新数组,长度是原长度+1
            Object[] newElements = Arrays.copyOf(elements, len + 1);
            // 将数据放到新数组中
            newElements[len] = e;
            //将新数组赋值给自己
            setArray(newElements);
            return true;
        } finally {
            lock.unlock();
        }
    }          

final void setArray(Object[] a) {
        array = a;
    }  

 

标签:elements,lock,Object,len,CopyOnWriteArrayList,数组
From: https://www.cnblogs.com/zhuyilong/p/17123230.html

相关文章

  • 线程安全集合CopyOnWriteArrayList
    解决多线程的集合有以下几种1、Vertor(所有方法上加synchronized锁)能保证多线程安全,数据一致,但性能低下一般不用2、Collections.synchronizedList方法返回的List 在方......
  • 并发容器之CopyOnWriteArrayList
    Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一......
  • CopyOnWriteArrayList的使用和优缺点
    CopyOnWriteArrayList允许并发读,读操作无锁,性能较高;而写操作(含删除),比如向容器中添加/删除一个元素,则首先将当前容器复制一份,然后在新副本上执行写操作,结束之后再将原容......
  • 【collection】4.java容器之LinkedList,Stack,CopyOnWriteArrayList
    LinkedList节点数据结构/***泛型结构*@param<E>node*/privatestaticclassNode<E>{ Eitem; //双向链表,向前和向后 Node<E>next; Node<E>prev; N......
  • java并发数据结构之CopyOnWriteArrayList
    CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对......
  • CopyOnWriteArrayList 是如何保证线程安全的?
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。前言大家好,我是小彭。在上一篇文章里,我们聊到了ArrayList的线程安全问题,其中提到了CopyOnW......
  • CopyOnWriteArrayList与CopyOnWriteArraySet详解
    什么是CopyOnWrite容器【1】CopyOnWrite容器是基于并发模式Copy-on-Write模式(最简单的并发解决方案)实现的用于避免共享的数据集合。【2】CopyOnWrite容器又被成......
  • CopyOnWriteArrayList集合
    CopyOnWriteArrayList是为了增加在写操作的时候的读操作的性能因为并发问题主要是写操作,当一个线程进行写操作时,会使用Reetranlock加锁,然后会复制一份原数组在新数组上进......