如果您查看基础数组引用,您会看到它被标记为
volatile。当发生写操作时(例如,在上面的摘录中),该
volatile引用仅在final语句中通过进行更新
setArray。到目前为止,所有读取操作都将返回数组
旧副本 中的元素。
重要的一点是, 数组更新是原子操作 ,因此读取将始终看到数组处于一致状态。
只对写操作进行锁定的优点是提高了读取的吞吐量:这是因为对a的写操作
CopyOnWriteArrayList可能很慢,因为它们涉及复制整个列表。

如果您查看基础数组引用,您会看到它被标记为
volatile。当发生写操作时(例如,在上面的摘录中),该
volatile引用仅在final语句中通过进行更新
setArray。到目前为止,所有读取操作都将返回数组
重要的一点是, 数组更新是原子操作 ,因此读取将始终看到数组处于一致状态。
只对写操作进行锁定的优点是提高了读取的吞吐量:这是因为对a的写操作
CopyOnWriteArrayList可能很慢,因为它们涉及复制整个列表。