为什么 CopyOnWriteArrayList 使用额外的内存进行设置,添加操作

Why CopyOnWriteArrayList uses extra memory for set,add operation

根据我对在 CopyOnWriteArrayList 中更新数据的理解。 set 方法使用 ReentrantLock 锁定,数据被复制到一个局部变量中,要添加的数据被添加到这个局部变量中,然后它被更新为整个 List 数据。与 Vector 和 synchronizedList

的 set 方法的同步版本相比,这样做有什么好处吗?

Is there any advantage of doing this over synchronized version of set method of Vector and synchronizedList

例如,您不能在一个线程中迭代 synchronizedList 并在另一个线程中修改它。你会得到一个 ConcurrentModificationExceptionCopyOnWriteArrayList 永远不会发生这种情况, 因为迭代器的底层数据结构从未被修改过。

Javadoc中的描述清楚地说明了优点和缺点。