CopyOnWriteArrayList和synchronizedList之间的区别
- 论坛
- CopyOnWriteArrayList和synchronizedList之间的区别
15 浏览
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();
}
}