前言
JUC 下面还有一个系列的类,都是 CopyOnWriteXXX ,意思是写时复制,这个究竟是怎么回事?那就以 CopyOnWriteArrayList 为切入点,一起了解写时复制是怎么回事?
介绍
ArrayList 的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。
像名字一样,每次进行操作的时候,都会进行一次复制,当然会有很大的性能消耗,但是在某些使用场景下,又会提高性能。具体是怎么操作的,那就一步一步阅读源码,然后再做总结归纳。
基本使用
public class CopyOnWriteArrayListTest {
public static void main(String[] args) {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
// 添加元素
list.add("liuzhihang");
// 移除元素
list.remove("liuzhihang");
// 查看元素
String value0 = list.get(0);
// 遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
}
}
}
复制代码
问题疑问
- 为什么要叫写时复制集合?
- CopyOnWriteArrayList 实现原理是什么?
- CopyOnWriteArrayList 和 ArrayList 有什么区别?
- CopyOnWriteArrayList 复制是怎么进行复制的?
源码分析
基本结构
参数介绍
public class CopyOnWriteArrayList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Seriali