ConcurrentHashMap 原理簡要分析

2021-07-05 05:26:52 字數 1063 閱讀 5610

在之前寫過hashtable 與hashmap 兩者之間的異同:

通過前面文章,可以知道hashmap

中未進行同步考慮,而

hashtable

則使用了

synchronized

,帶來的直接影響就是可選擇,我們可以在單執行緒時使用

hashmap

提高效率,而多執行緒時用

hashtable

來保證安全。

通過分析

hashtable

就知道,synchronized

是針對整張

hash

表的,即每次鎖住整張表讓執行緒獨佔,安全的背後是巨大的浪費,慧眼獨具的

doug lee

立馬拿出了解決方案

----concurrenthashmap

。concurrenthashmap

和hashtable

主要區別就是圍繞著鎖的粒度以及如何鎖

concurrenthashmap

的實現方式

---鎖桶(或段)。

concurrenthashmap

將hash

表分為16

個桶(預設值),諸如

get,put,remove

等常用操作只鎖當前需要用到的桶。試想,原來只能乙個執行緒進入,現在卻能同時

16個寫執行緒進入(寫執行緒才需要鎖定,而讀執行緒幾乎不受限制),併發性的提公升是顯而易見的。

更令人驚訝的是

concurrenthashmap

的讀取併發,因為在讀取的大多數時候都沒有用到鎖定,所以讀取操作幾乎是完全的併發操作,而寫操作鎖定的粒度又非常細,比起之前又更加快速(這一點在桶更多時表現得更明顯些)。

只有在求

size

等操作時才需要鎖定整個表。

綜上所述,在多執行緒併發情況下,concurrenthashmap 優於hashtable。

ConcurrentHashMap原理分析

hashtable是乙個執行緒安全的類,它使用synchronized來鎖住整張hash表來實現執行緒安全,即每次鎖住整張表讓執行緒獨佔。concurrenthashmap允許多個修改操作併發進行,其關鍵在於使用了鎖分離技術。它使用了多個鎖來控制對hash表的不同部分進行的修改。concurrent...

ConcurrentHashMap 的原理和結構

concurrenthashmap 是乙個高效的執行緒安全的hashmap,它的加鎖機制和hashtable不同,後者用的是低效的synchronized,前者用的是lock。接著前一期的hashmap,先簡單介紹下concurrenthashmap結構,再以它們的主要函式 put 和 get為切入...

ConcurrentHashMap原理解析

什麼是concurrenthashmap?眾所周知,hashmap是一種非常高效的資料結構,但是依舊有它的缺陷。那就是在併發插入資料時,有可能會出現帶環鍊錶,讓下一次的讀操作出現死迴圈。於是為了避免hashmap的執行緒安全問題,concurrenthashmap應運而生。concurrenthas...