CopyOnWriteArrayList 仅适用于迭代而不适用于随机访问读取

CopyOnWriteArrayList suitable only for iterations and not random access reads

我在 this 问题线程中看到以下评论:

Because the CopyOnWriteArrayList is for safe traversals. The cost of using it is duplicating the underlying array of references for each modification and possibly retaining multiple copies for threads iterating over stale versions of the structure. A ReadWriteLock would allow multiple readers and still let the occasional writer perform the necessary modifications

我刚刚开始学习 CopyOnWriteArrayList,有人可以详细说明上面的语句是什么意思吗?随机访问读取而不是迭代如何使 ReadWriteLock 成为更好的选择?

当你使用iterator遍历CopyOnWriteArrayList时,调用iterator()时会得到一个list的快照,以后的修改不会影响你的快照,所以你会一直循环遍历数据副本调用迭代器。

对于随机访问循环,它将从列表的当前新副本中获取数据。并且如果发生了一些修改,以后的随机访问会读取修改后的列表,可能会导致一些同步问题。所以 ReadWriteLock 在这里将有助于使遍历线程安全。