java cow有必要copy吗

hehe_ 发布于 2019/02/21 20:35
阅读 238
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

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();
    }
}

这个是cow list的add的代码, 其中getArray返回的是全局的数组 是有volatile 修饰的

private transient volatile Object[] array;

 

既然有 volatile 修饰保证了可见性还有必要 增加一步复制操作吗, 还是说复制只是为了扩容

加载中
1
逍遥huang
逍遥huang

数组不可变的,扩容就是一个length+1新数组,然后把以前数组的内容copy过去,最后把需要add的元素加在新数组最后一个节点,返回新数组

0
关河
关河

数组不Copy,怎么复制数据?

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部