0

我在这个问题线程上遇到了以下评论:

因为 CopyOnWriteArrayList 用于安全遍历。使用它的成本是为每次修改复制底层引用数组,并可能为迭代结构的陈旧版本的线程保留多个副本。ReadWriteLock 将允许多个读取器,并且仍然允许偶尔的写入器执行必要的修改

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

4

1 回答 1

1

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

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

于 2019-12-20T05:34:25.913 回答