copyOnwriteArrayList是arraylist,是线程-Safe。CopyOnwritearRayList的源代码基于JDK1.8。
copyOnWriteArrayList关系图:
CopyOnWriteArrayList实现了列表接口的所有方法,主要包括以下两个成员变量:
在CopyOnWritearRaylist中,与容量相关的属性或常数没有属性或常数。原因可以通过一些常见方法的源代码知道。
美容结构功能:
参数构造函数直接创建一个长度为0的对象数组。
这
这
将元素添加到CopyOnwritearRaylist的末尾:
可以看出,添加操作确保通过重新进入的线程安全性。通过添加方法,我们还可以看到,CopyOnwritearRaylist修改的操作的基本思想是:复制新数组,新数组的长度只能容纳需要的元素要添加;在新数组中运行;最终将新数组分配给数组到数组到数组到数组到数组到数组到数组到数组到数组至数组至array to arrayAttributes,替换旧数组。此想法也称为“编写时复制”,因此称为copyonWritearRayRarayList。
此外,我们可以看到,没有类似于ArrayList在CopyOnWritearRaylist中的扩展的操作。
指定指定元素:
设置指定位置的值:
删除指定的设置元素:
可以看出,在新数组中执行了CopyOnWritearRaylist中的添加和删除和修改操作,并且可以确保只有一个线程可以通过锁定同时操作。操作完成后,并最终由GC恢复。
可以看出,操作分为两个步骤:
此过程未锁定,因此在并发环境中可能发生以下情况:
因此该方法很弱。
方法返回当前数组属性长度,因为CopyOnWritearRaylist中的数组数组每次都可以容纳所有元素,而不是像ArrayList这样的某个空间。元素的数量和阵列的长度相等。
可以看出,迭代器也很弱且一致,并且在锁中不执行。如果其他线程不操作copyonwritearraylist listrist,则在创建迭代器时仍获得快照,但是如果其他线程运行,则该数组是CopyOnWriteArrayList,旧数组将被新数组替换,但是快照将被替换,但是快照将是原始的旧数组参考:
输出结果只是您好。