0
点赞
收藏
分享

微信扫一扫

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

左小米z 2022-03-20 阅读 24

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锁,灵活控制锁的范围,

举报

相关推荐

0 条评论