古詩詞大全網 - 漢語詞典 - hashmap和concurrenthashmap的區別是什麽?

hashmap和concurrenthashmap的區別是什麽?

hashmap和concurrenthashmap的區別如下:

HashMap不是線程安全的,而ConcurrentHashMap是線程安全的。

ConcurrentHashMap采用鎖分段技術,將整個Hash桶進行了分段segment,也就是將這個大的數組分成了幾個小的片段segment,而且每個小的片段segment上面都有鎖存在。

那麽在插入元素的時候就需要先找到應該插入到哪壹個片段segment,然後再在這個片段上面進行插入,而且這裏還需要獲取segment鎖。

ConcurrentHashMap讓鎖的粒度更精細壹些,並發性能更好。

HashMap:

底層數組+鏈表實現,可以存儲null鍵和null值,線程不安全。

初始size為16,擴容:newsize = oldsize*2,size壹定為2的n次冪。

擴容針對整個Map,每次擴容時,原來數組中的元素依次重新計算存放位置,並重新插入。

插入元素後才判斷該不該擴容,有可能無效擴容(插入後如果擴容,如果沒有再次插入,就會產生無效擴容)。

ConcurrentHashMap:

底層采用分段的數組+鏈表實現,線程安全。

通過把整個Map分為N個Segment,可以提供相同的線程安全,但是效率提升N倍,默認提升16倍。(讀操作不加鎖,由於HashEntry的value變量是 volatile的,也能保證讀取到最新的值。)。

Hashtable的synchronized是針對整張Hash表的,即每次鎖住整張表讓線程獨占,ConcurrentHashMap允許多個修改操作並發進行,其關鍵在於使用了鎖分離技術。