ConcurrentHashMap在Java8中的變化

增長紅黑樹這個存儲結構安全

在Java8中,爲何要增長紅黑樹這種數據結構來進行存儲,而不是所有使用鏈表來進行存儲呢? 1.由於攻擊者能夠構造大量具備相同hashCode的內容,使其所有放在同一個列表中,這樣,在查找的時候,所花費的時間會很長。這個時候,若是採用紅黑樹這個結構來進行存儲,那麼其查找的效率會高不少。 2.hashCode()函數的計算有時候並不合理,例如重寫hashCode函數的時候。若是都映射到同一個位置,那麼查找的時間也會很長。數據結構

mappingCount()app

在ConcurrentHashMap中若是存儲大量的元素,那麼使用size()方法獲取的結果可能不正確,由於其是用int類型做爲返回值的。ide

若是想要獲取到正確的結果,那麼能夠使用hashMap.mappingCount();其返回值爲long類型。函數

更新指定鍵中的值spa

ConcurrentHashMap是一個安全的數據結構(get()、put()操做不會破壞數據結構),可是它的並不保證操做值的安全。例如設置對應鍵的值,這個就不是線程安全的。線程

如何才能安全地更新值呢?blog

使用replace()方法get

值使用的是LongAdder,它能夠保證原子操做hash

Java8新增的方法來實現線程安全地對鍵進行操做

 
相關文章
相關標籤/搜索