原理
- 初始化时候,CopyOnWriteArrayList内部维护了一个可变数组,用于存储元素
- 当执行数据变更操作的时候,会先创建一个原数组的副本,在副本上进行写操作,修改副本中的元素。写操作完成之后,把原数组的引用指向新数组。
- 读操作直接在原数组上进行,因为读操作不会改变数据,所以读操作不会加锁
优点
- 我们可以对CopyOnWriteArrayList并发的读,而不需要加锁,采用了读写分离的思想,读和写不同的容器
缺点
- 内存占用问题:因为CopyOnWriteArrayList的写时复制机制,在写的时候,内存中会出现两个对象的内存,旧的对象和新写入的对象,可能会造成频繁的young gc和full gc,影响性能
- 数据一致性问题:CopyOnWriteArrayList只能保证数据的最终一致性,不能保证数据的实时一致性。所以你希望写入的数据马上被得到,就不能用CopyOnWriteArrayList