Android并发编程 原子类与并发容器 (4)

我们来看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 并发工具类与线程池

参考博文

此致,敬礼

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdjfz.html