ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JUC:6_2解析CopyOnWrite:写入时复制、CopyOnWriteArrayList比Vector好在哪里

2022-03-20 19:32:46  阅读:140  来源: 互联网

标签:JUC CopyOnWrite lock CopyOnWriteArrayList add Vector 源码


JUC:6_2解析CopyOnWrite、CopyOnWriteArrayList比Vector好在哪里

什么是解析CopyOnWrite

CopyOnWrite,简称COW,是计算机程序设计领域的一种优化策略
多个线程调用的时候,读取的时候是固定的,写入时覆盖,

读写分离,写时复制

CopyOnWriteArrayList比Vector好在哪里?

Vector add源码

    public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
    }

CopyOnWriteArrayList源码

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比Vector的效率高,CopyOnWriteArrayList这个类的读取操作是不需要同步的,Vector读操作和写操作都是synchronized的。
通过源码,可以看到Vector的add方法是synchronized修饰的方法,整个方法体都被包围,而CopyOnWriteArrayList使用的更为轻便的Lock锁,灵活控制锁的范围,

标签:JUC,CopyOnWrite,lock,CopyOnWriteArrayList,add,Vector,源码
来源: https://blog.csdn.net/qq_41929714/article/details/123604011

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有