其他分享
首页 > 其他分享> > JUC:6_2解析CopyOnWrite:写入时复制、CopyOnWriteArrayList比Vector好在哪里

JUC:6_2解析CopyOnWrite:写入时复制、CopyOnWriteArrayList比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