Java併發編程之ConcurrentHashMap

ConcurrentHashMap
ConcurrentHashMap是一個線程安全的Hash Table,它的主要功能是提供了一組和HashTable功能相同可是線程安全的方法。ConcurrentHashMap能夠作到讀取數據不加鎖,而且其內部的結構可讓其在進行寫操做的時候可以將鎖的粒度保持地儘可能地小,不用對整個ConcurrentHashMap加鎖。數組

ConcurrentHashMap的內部結構
ConcurrentHashMap爲了提升自己的併發能力,在內部採用了一個叫作Segment的結構,一個Segment其實就是一個類Hash Table的結構,Segment內部維護了一個鏈表數組,咱們用下面這一幅圖來看下ConcurrentHashMap的內部結構: 安全

圖片描述

從上面的結構咱們能夠了解到,ConcurrentHashMap定位一個元素的過程須要進行兩次Hash操做,第一次Hash定位到Segment,第二次Hash定位到元素所在的鏈表的頭部,所以,這一種結構的帶來的反作用是Hash的過程要比普通的HashMap要長,可是帶來的好處是寫操做的時候能夠只對元素所在的Segment進行加鎖便可,不會影響到其餘的Segment,這樣,在最理想的狀況下,ConcurrentHashMap能夠最高同時支持Segment數量大小的寫操做(恰好這些寫操做都很是平均地分佈在全部的Segment上),因此,經過這一種結構,ConcurrentHashMap的併發能力能夠大大的提升。併發

相關文章
相關標籤/搜索