1. 程式人生 > >ConcurrentMap、ConcurrentSkipListMap(支援併發排序功能,彌補ConcurrentHashMap)

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

                                       併發類容器

第一步:介紹下ConcurrentMap及其兩個實現ConcurrentHashMap和ConcurrentSkipListMap

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

    ConcurrentHashMap——可以理解為hashTable或者hashMap

    ConcurrentSkipListMap(支援併發排序功能,彌補ConcurrentHashMap)——可以理解為treeMap

第二步:與傳統的HashTable進行對比介紹下

1、傳統的hashMap一個程序進行寫操作時,另一個程序過來之後只能等待,它寫完後另一個程序才可以進行寫;

2、ConcurrentHashMap,分成十六個段,可以併發進行,減小鎖的粒度----細粒度

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

第三步:解釋下volatile

   主要作用:使變數在多個執行緒之間可見;
   放在private、public等等後面一同修飾變數,

    第四步:進行demo演示

TestGuo201908——>UseConcurrentMap.java

二、CopyOnWrite

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

JDK裡面的COW容器有兩種:CopyOnWriteArrayList和CopyOnWriteArraySet,

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

什麼是CopyOnWrite?

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

最好在讀多寫少的情況下使用CopyOnWrite;