1. CopyOnWriteArrayList
1.1. 特点:
- 写入时拷贝
- 并发读、并发读写,同步写写(互斥)
1.2. 原理:
add(E e)
操作加了锁(jdk8版本使用ReentrantLock,11版本使用synchronized),保证添加时只能有一个线程操作。
在add方法中,在获取到锁后,先将原数组复制一份,在新数组基础上进行添加元素,然后将原数组替换为新数组,完成添加元素的方法。
1.3. 应用场景
CopyOnWriteArrayList适用于读多写少的场景,因为写操作(包括add、remove)涉及到数组的的拷贝,比较耗时。
1.4. 问题
弱一致性。 注意:并发高和数据一致性是矛盾的。
2. CopyOnWriteArraySet
CopyOnWriteArraySet内部使用CopyOnWriteArrayList对象,所有的操作都是在这个对象上的。