阅读目录
什么是CopyOnWrite容器
CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。
CopyOnWriteArraySet简单使用
public class TestCopyOnWriteArraySet {
public static void main(String[] args) throws Exception {
final CopyOnWriteArraySet<Integer> set = new CopyOnWriteArraySet<>();
Thread t1 = new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
set.add(i);
Thread.sleep(10);
}
} catch (Exception ex) {
}
});
t1.start();
Thread.sleep(30);
Thread t2 = new Thread(() -> {
for (Integer item : set) {
System.out.println(item);
}
});
t2.start();
}
}
运行程序,结果输出如下:
0
1
2
CopyOnWriteArraySet类图
CopyOnWriteArraySet底层实现其实是调用了CopyOnWriteArrayList 的方法。
CopyOnWriteArraySet实现原理
CopyOnWriteArraySet源代码分析
add(E e) 方法
private final CopyOnWriteArrayList<E> al;
// 构造函数
public CopyOnWriteArraySet() {
al = new CopyOnWriteArrayList<E>();
}
//添加元素
public boolean add(E e) {
return al.addIfAbsent(e);
}
remove(Object o) 方法
// 移除元素
public boolean remove(Object o) {
return al.remove(o);
}