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