JAVA集合框架整理(三)
阿新 • • 發佈:2018-12-16
- ConcurrentHashMap允許多個修改操作併發進行,其關鍵在於使用了鎖分離技術。
- 它使用了多個鎖來控制對hash表的不同段進行的修改,每個段其實就是一個小的hashtable,它們有自己的鎖。只要多個併發發生在不同的段上,它們就可以併發進行。
- ConcurrentHashMap在底層將key-value當成一個整體進行處理,這個整體就是一個Entry物件。Hashtable底層採用一個Entry[]陣列來儲存所有的key-value對,當需要儲存一個Entry物件時,會根據key的hash演算法來決定其在陣列中的儲存位置,在根據equals方法決定其在該陣列位置上的連結串列中的儲存位置;當需要取出一個Entry時,也會根據key的hash演算法找到其在陣列中的儲存位置,再根據equals方法從該位置上的連結串列中取出該Entry。
- 與HashMap不同的是,ConcurrentHashMap使用多個子Hash表,也就是段(Segment)。
- ConcurrentHashMap完全允許多個讀操作併發進行,讀操作並不需要加鎖。如果使用傳統的技術,如HashMap中的實現,如果允許可以在hash鏈的中間新增或刪除元素,讀操作不加鎖將得到不一致的資料。ConcurrentHashMap實現技術是保證HashEntry幾乎是不可變的。