copyonwritearraylist原理_Java集合干货——CopyOnWriteArrayList源码分析
前言
CopyOnWriteArrayList是一個線程安全集合,原理簡單說就是:在保證線程安全的前提下,犧牲掉寫操作的效率來保證讀操作的高效。所謂CopyOnWrite就是通過復制的方式來完成對數據的修改,在進行修改的時候,復制一個新數組,在新數組上面進行修改操作,這樣就保證了不改變老數組,也就沒有一寫多讀數據不一致的問題了。
具體的實現來看源碼,JDK 8。
CopyOnWriteArrayList
定義
public在定義上和ArrayList大差不差,不過多解釋,有興趣可以看之前關于ArrayList的文章。
屬性
一個是Lock,另一個是一個對象數組。
/** The lock protecting all mutators */初始化
CopyOnWriteArrayList的初始化容量是0,分為這樣的幾個步驟。
//在無參構造方法中會調用setArray方法,參數是一個空的對象數組,然后通過setArray把這個空的數組賦值給屬性array需要說明的是另一個有參構造方法,參數可以是一個集合
//按照集合的迭代器返回的順序創建一個包含指定集合元素的列表方法
add(E e)
添加一個新元素到list的尾部。
public從add方法中我們可以看到所謂的CopyOnWrite是如何實現的,在需要修改的時候,復制一個新數組,在新數組上修改,修改結束取代老數組,這樣保證了修改操作不影響老數組的正常讀取,另修改操作是加鎖的,也就是說沒有了線程不安全的問題。
和ArrayList相比較,效率比較低,只添加一個元素的情況下(初始容量均為0),用時是ArrayList的5倍左右,但是隨著CopyOnWriteArrayList中元素的增加,CopyOnWriteArrayList的修改代價將越來越昂貴。
除了添加其他的修改操作也都是這樣的套路,不做過多解釋,如remove,也是加鎖,復制新數組。
publicget
public讀取的方法就很簡單了,按照下標獲取對應的元素。
CopyOnWriteArrayList總結
總結
以上是生活随笔為你收集整理的copyonwritearraylist原理_Java集合干货——CopyOnWriteArrayList源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ error函数_R语言中广义线性
- 下一篇: clickhouse原理解析与应用实践_