思想:将一个list中的某个值的数据删除,就是采用创建一个新的list作为新的容器,原始容器作为读的容器。最后将新的容器的引用给旧的list
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。
JDK里的COW容器有两种:
CopyOnWriteArrayList
CopyOnWriteArraySet
COW容器非常有用,可以在非常多的并发场景中使用到。
什么是CopyOnWrite容器?
1.什么是Copy-On-Write容器
CopyOnWrite容器即写时复制的容器。
通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,
而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,
添加完元素之后,再将原容器的引用指向新的容器。
这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,
因为当前容器不会添加任何元素。
所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。
2.代码实例:
package com.bfxy.thread.core.collection;
import java.util.concurrent.CopyOnWriteArrayList;
public class UseCopyOnWrite {
public static void main(String[] args) {
CopyOnWriteArrayList<String> cwal = new CopyOnWriteArrayList<>();
cwal.add("A");
}
}
单线程的:每次操作时候都会获得锁CopyOnWriteArrayList
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}