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;