CopyOnWriteArrayList和synchronizedList之间的区别

15 浏览
0 Comments

CopyOnWriteArrayList和synchronizedList之间的区别

根据我的理解,并发集合类优于同步集合类,因为并发集合类不会对整个集合对象进行加锁,而是对集合对象的一个小段进行加锁。但是,当我检查CopyOnWriteArrayList的add方法时,我们实际上是对整个集合对象进行加锁。那么,为什么CopyOnWriteArrayList比Collections.synchronizedList返回的列表更好呢?我在CopyOnWriteArrayList的add方法中唯一看到的区别是每次调用add方法时都会创建数组的副本。

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

}

}

0