关于java锁正确的是什么

您所在的位置:网站首页 下面关于java中包的说法正确的是什么 关于java锁正确的是什么

关于java锁正确的是什么

2024-07-17 09:55| 来源: 网络整理| 查看: 265

CopyOnWriteArrayList的实现原理

在使用CopyOnWriteArrayList之前,我们先阅读其源码了解下它是如何实现的。以下代码是向ArrayList里添加元素,可以发现在添加的时候是需要加锁的,否则多线程写的时候会Copy出N个副本出来。

public boolean add(T 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();

}

}

final void setArray(Object[] a) {

array = a;

}

读的时候不需要加锁,如果读的时候有多个线程正在向ArrayList添加数据,读还是会读到旧的数据,因为写的时候不会锁住旧的ArrayList。

public E get(int index) {

return get(getArray(), index);

}CopyOnWriteArrayList适用于读多写少的并发场景



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3