我们来看add 源码
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(); } }有了前面的积淀,这段代码可以说没有任何难度
获取重入锁(线程互斥锁)
创一个新的数组(在原有数据长度的基础上加1)并把原数组的数据拷贝到新数组
把新数组的引用设置为老数组
注 写入过程中,若有其他线程读取数据,那么读取的依然是老数组的数据
使用场景由上面的结构以及源码分析就知道CopyOnWriteArrayList用在读多写少的多线程环境中。
本篇总结本篇分享了一些原子操作类以及并发容器,这些在多线程开发中都很有作用。希望帮到你。
下篇预告Android 并发工具类与线程池
参考博文此致,敬礼