1. 程式人生 > >java多執行緒容器ConcurrentMap與CopyOnWrite

java多執行緒容器ConcurrentMap與CopyOnWrite

一、ConcurrentMap介面下有兩個重要的實現:

ConCurrentHashMap

ConcurrentSkipListMap(支援併發排序功能,彌補ConcurrentHashMap)

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

二、Copy-On-Write簡稱COW,是一種用於程式設計中的優化策略。

JDK裡的COW容器有兩種:CopyOnWriteArrayList和CopyOnWriteArraySet, COW容器非常有用,可以在非常多的併發場景中使用到。

什麼是CopyOnWrite容器?

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