天天看點

兩個并發集合ConcurrentHashMap和CopyOnWriteArrayList知識點彙集

1、ConcurrentHashMap和CopyOnWriteArrayList都是多線程裡線程安全的類,是HashMap和ArrayList的多線程替代類。不過也不是絕對的資料一緻性,隻是弱一緻性,比如size()等方法需要掃描全表的操作不保證資料一緻。與HashMap不同的是,ConcurrentHashMap并不允許key或者value為null。

2、ConcurrentHashMap在1.7裡采用的是分段鎖Segment,預設并發度是16,自定義并發度的時候是取值為大于等于自定義值的最小2的幂次方的數字,每一個Segment裡存放的都是類似于HashMap的資料結構,相當于多個HashMap的集合,隻不過對每個HashMap的寫操作有lock。對于并發度的設定不要過小也不要過大,過小的話鎖競争頻繁,過大的話CPU cache命中率會下降,進而引起程式性能下降。

3、ConcurrentHashMap在1.8裡抛棄了分段鎖Segment,采用低層次的原子指令,使用無鎖算法(CAS算法)。大體實作代碼量很大,跟1.7完全不一樣,感興趣的自己看看。

繼續閱讀