CopyOnWriteArrayList
CopyOnWriteArrayList
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。
construct
|
|
add
|
|
get
|
|
remove
|
|
小结
1、CopyOnWrite并发容器也是一种读写分离的思想,读和写不同的容器。且用于读多写少的并发场景。如果频繁写,将会每次创建数组,效率低。
2、内存占用问题。因为CopyOnWrite的写时复制机制,所以在进行写操作的时候,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象,如果对象较大,那么这个时候很有可能造成频繁的Yong GC和Full GC。
3、数据一致性问题。CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。所以如果你希望写入的的数据,马上能读到,请不要使用CopyOnWrite容器。