Advertisement

Java并发包中的列表代码分析

阅读量:

CopyOnWriteArrayList(写时复制ArrayList)

写时复制 :这一机制属于JUC并发包中基于写时复制策略的ArrayList实现。为何采用写时复制的方式?原因在于,当执行对集合元素进行修改的相关操作时,系统会首先创建原始数组的一个副本,并在该副本上执行相应操作,最终将原数组的引用指向更新后的数组,从而完成数据的更新。此过程的原子性依赖于独占锁机制加以保障,这种技术即被称为写时复制。该类被归入并发包的原因在于其操作具备线程安全性,底层通过独占锁实现同步(需要注意的是,此类并未使用CAS操作)。

弱一致性 :从上述描述可以看出,在读取操作方面并不会受到任何限制,任意线程均可访问数据内容,即使当前存在一份数据副本正在被修改,读取行为依然可以正常进行。这种特性引发了一个问题:若某线程先调用了用于修改List的操作方法,随后再调用读取其中特定元素的方法,则理论上应获取到已被修改的数据内容。然而由于对数据的修改是针对副本(即快照)进行的,在引用尚未更新之前,其他线程所获取到的数据仍为原始数组的内容。这与代码执行顺序之间出现了逻辑上的矛盾现象,即所谓的弱一致性问题。

CopyOnWriteArrayList源码分析

初始化:
它包含三种构建方式。
1 、无参数构造:
在初始化过程中,会创建一个长度为

全部评论 (0)

还没有任何评论哟~