分段鎖其實是一種鎖的設計,並不是具體的一種鎖,對於concurrenthashmap而言,其併發的實現就是通過分段鎖的形式來實現高效的併發操作。
我們以concurrenthashmap來說一下分段鎖的含義以及設計思想,concurrenthashmap中的分段鎖稱為segment,它即類似於hashmap(jdk7與jdk8中hashmap的實現)的結構,即內部擁有乙個entry陣列,陣列中的每個元素又是乙個鍊錶;同時又是乙個reentrantlock(segment繼承了reentrantlock)。
當需要put元素的時候,並不是對整個hashmap進行加鎖,而是先通過hashcode來知道他要放在那乙個分段中,然後對這個分段進行加鎖,所以當多執行緒put的時候,只要不是放在乙個分段中,就實現了真正的並行的插入。
但是,在統計size的時候,可就是獲取hashmap全域性資訊的時候,就需要獲取所有的分段鎖才能統計。
分段鎖的設計目的是細化鎖的粒度,當操作不需要更新整個陣列的時候,就僅僅針對陣列中的一項進行加鎖操作。
ConcurrentHashMap 的原理和結構
concurrenthashmap 是乙個高效的執行緒安全的hashmap,它的加鎖機制和hashtable不同,後者用的是低效的synchronized,前者用的是lock。接著前一期的hashmap,先簡單介紹下concurrenthashmap結構,再以它們的主要函式 put 和 get為切入...
concurrenthashmap的實現原理
提供了更好的寫併發能力,降低了對讀一致性的要求。允許多個修改操作併發進行,關鍵在於使用了鎖分離技術。它使用多個鎖來控制對hash表的不同部分的修改。concurrenthashmap內部使用segment來表示這些不同的部分。每個段其實都是乙個曉得hashtable。他們有自己的鎖。需要跨段的方法s...
ConCurrentHashMap的實現原理
設計思路 concurrenthashmap採用分段鎖的思想,每乙個段都有一把鎖,從而提高了併發度 即同時操作concurrenthashmap而不產生鎖競爭的執行緒最大數 另外,當設定併發數時,會預設將併發數改為2的冪。所謂的段,就是segment,他和hashmap的結構很像,都在內部有乙個en...