13 ConcurrentMap & Copy-On-Write容器

1.1 ConcurrentMap

ConcurrentMap接口有兩個實現類:

ConcurrentHashMap

ConcurrentSkipListMap(支持排序功能,彌補ConcurrentHashMap)

ConcurrentHashMap內部使用段(Segment)來表示這些不同的部分,每個段其實就是一個小的HashTable,他們有自己鎖。只要多個修改操作發生在不同的段上,他們就可以併發進行。把一個整體分成16個段(Segment)。也就是最高支持16個線程的併發修改操作。這也是在多線程場景時減小鎖的粒度從而降低鎖競爭的一種方案。並且代碼中大多共享變量使用volatile關鍵字聲明,目的是第一時間獲取修改的內容,性能非常好。

 

ConcurrentHashMap原理圖:

 

 

1.2 Copy-On-Write容器

簡稱COW,是一種用於程序設計中的優化策略。

JDK裏的COW容器有兩種:CopyOnWriteArrayList和CopyOnWriteArraySet。

 

COW容器非常有用,可以在非常多的併發場景中使用到。

 

CopyOnWrite容器即寫時複製的容器。通俗的理解是當我們往一個容器添加元素的時候,不直接往當前容器中添加,而是先將當前的容器進行copy,複製出一個新的容器,然後新的容器裏添加元素,添加完元素之後,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進行併發的讀,而不需要加鎖,因爲當前容器不會添加任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器。

 

CopyOnWrite原理圖:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章