公众号merlinsea
- CopyOnWriteArrayList
- 在做set操作的时候,如果set对应位置的oldValue不等于newValue的时候,会在内存中拷贝一份新的数组,这时候内存中存在两个数组实例的问题,并且此时其他元素读取内容还是老数组中的内容。由于加锁的操作,保证了任何时候至多只能有一个线程对其进行写操作,故内存中最多存在两个数组,不可能有三个四个数组存在。
- 设计思想:读写分离,最终一致。读操作是对原来的数组操作,写操作是拷贝一个新的数组操作,然后在将新的数组复制给老的数组
缺点:内存中可能会存在两个内存一致的数组,因此存在内存的浪费问题
- get操作不加锁,只在增add,删remove,改set操作才加锁,在增、删、改的每个方法中获取reentrantLock实例,保证线程安全性。
- 适用场景:多线程环境下,针对读多写少的场景非常适用,因为copyOnWriteArrayList可以保证读操作不加锁,同时写操作保证线程安全。
算法训练营永久刷题班元旦优惠价,超低价格永久刷题。加入我们可以一起备战明年的春招笔试,快来参加吧~
元旦算法训练营教学福利来啦~
奔跑的小梁,公众号:梁霖编程工具库leetcode刷题直播教学,手把手带你刷题,元旦价格优惠通知,超低价格永久刷题