Java 集合 HashMap ConcurrentHashMap

參考連接:html

http://www.javashuo.com/article/p-zcbvqkex-ey.html數組

https://my.oschina.net/hosee/blog/639352安全

1. HashMap爲何是線程不安全的?

HashMap底層是一個Entry數組。若是兩個Key的Hash值相同,則會產生碰撞衝突。併發

HashMap擴容時會生成一個新的數組。spa

2. ConcurrentHashMap

ConcurrentHashMap容許多個修改操做併發進行,其關鍵在於使用了鎖分離技術。它使用了多個鎖來控制對Hash表的不一樣部分進行的修改。ConcurrentHashMap內部使用段(Segment)來表示這些不一樣的部分,每一個段其實就是一個小的HashTable, 它們有本身的鎖。只要多個修改操做發生在不一樣的段上,它們就能夠併發進行。.net

ConcurrentHashMap是線程安全的類,並不能保證使用了ConcurrentHashMap的操做都是安全的。線程

ConcurrentHashMap的get不須要加鎖,put操做須要加鎖。htm

相關文章
相關標籤/搜索