【发布时间】:2015-03-11 05:50:10
【问题描述】:
根据我的理解,并发集合类优于同步集合,因为并发集合类不会锁定完整的集合对象。相反,它们会锁定集合对象的一小部分。
但是当我检查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();
}
}
【问题讨论】:
-
CopyOnWriteArrayList 允许您在不同线程中修改列表而不会抛出并发修改异常。
-
programmerzdojo.com/java-tutorials/… 检查此链接可能会有所帮助
标签: java collections