为什么 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
并在另一个线程中修改它。你会得到一个 ConcurrentModificationException
。
CopyOnWriteArrayList
永远不会发生这种情况,
因为迭代器的底层数据结构从未被修改过。
Javadoc中的描述清楚地说明了优点和缺点。
根据我对在 CopyOnWriteArrayList 中更新数据的理解。 set 方法使用 ReentrantLock 锁定,数据被复制到一个局部变量中,要添加的数据被添加到这个局部变量中,然后它被更新为整个 List 数据。与 Vector 和 synchronizedList
的 set 方法的同步版本相比,这样做有什么好处吗?Is there any advantage of doing this over synchronized version of set method of
Vector
andsynchronizedList
例如,您不能在一个线程中迭代 synchronizedList
并在另一个线程中修改它。你会得到一个 ConcurrentModificationException
。
CopyOnWriteArrayList
永远不会发生这种情况,
因为迭代器的底层数据结构从未被修改过。
Javadoc中的描述清楚地说明了优点和缺点。