Java-多线程并发之List源码剖析
CopyOnWriteArrayList:
是一个线程安全的ArrayList,对其的修改操作都是在底层的一个复制数组上进行的,也就是写时复制策略。
成员变量:
Object数组
独占锁
方法:
add
set
size
isEmpty
remove
iterator
通过写时复制的方法来保证一致性。获取-修改-写入的三步不是原子性操作。所以使用了独占锁来保证一致性。
CopyOnWriteArrayList的迭代器是弱一致性迭代器。获取迭代器后,其他线程对list的修改迭代器是不可见的状态,所以迭代器遍历的数组实际上是一个快照。snapshot 。