“CopyOnWriteArrayList底层原理?”
大家好,我是Mic,一个工作了14年的Java程序员
一个工作4年的程序员去某互联网公司面试,被问到了这个问题。
如果大家不知道这个问题该怎么回答,可以扫描文章尾端二维码领取我整理的50W字的大厂面试指南。
问题分析
这个集合大家可能用得比较少。
它是Java并发集合框架中的一种线程安全的List实现。
它的特点是在进行写操作时会创建一个底层数组的副本,并在副本上进行操作,而不是直接在原始数组上进行修改。
所以,它适用于读多写少的场景。
下面来看下这个问题的完整回答。
问题解答
关于CopyOnWriteArrayList的工作原理,我的理解是这样的。
-
初始化的时候,CopyOnWriteArrayList内部维护一个可变数组,用于存储元素。
-
当执行数据变更操作的时候,先创建一个原数组的副本。
-
在副本上进行写操作,修改副本中的元素。
-
写操作完成后,把原数组的引用指向新的副本数组,使得新的数组成为内部的数组。
-
读操作直接在原数组上进行,因为读操作不会改变数据,所以读取元素时不需要加锁。
CopyOnWriteArrayList的工作原理保证了多线程并发环境下读写操作的线程安全性,实际上可以简单认为它就是做了读写分离的设计机制。
总结
大家知道怎么回答了吗?
如果你喜欢我的作品,记得点赞收藏加关注哦!!!
另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前总计超过50W字!