ConcurrentHashMap 1.7總結(jié)

一、通過Key找到在Segment[]數(shù)組中的位置:

1. 變量定義:

ssize:

不小于concurrencyLevel的最小2的N次方, 默認(rèn)concurrencyLevel等于16;

segmentShift:

32 - ssize從1左移的位數(shù);

segmentMask:

ssize - 1;

key的hash方法

key的hash方法.png

2. 通過UnSafe獲取Segment[]數(shù)組中下標(biāo)為index的元素的地址

index對應(yīng)的Segment數(shù)組元素.png

3. 將Key放在HashMap的合適位置

3.1 由key確定在Segment[]數(shù)組中的下標(biāo)
key在Segment數(shù)組中的下標(biāo).png
3.2 將Key插入到Segment中的合適的位置

① 獲取key在table中的下標(biāo),記為index。
index = hash & (table.length - 1);
② 取table[index]的頭部HashEntry,記為first。若first == null,表示table的index下標(biāo)位置為null,新建一個(gè)HashEntry放置在table[index]的頭部;若first != null,則進(jìn)入③:
③ 從first開始沿鏈表遍歷,若找到
(e.key == key || (e.hash == hash && key.equals(e.key))
則表示table中key已存在,用value替換oldValue,并返回oldValue;若直到鏈表的末尾也沒找到,則構(gòu)建新的HashEntry插入table[index]的鏈表頭部。

3.3 put操作獲取Segment的自旋鎖的過程
獲取自旋鎖和預(yù)創(chuàng)建節(jié)點(diǎn).png

4. UnSafe的常量

UnSafe常量.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)據(jù)結(jié)構(gòu) ConcurrentHashMap 實(shí)現(xiàn)并發(fā)操作的原理 使用了鎖分段技術(shù):ConcurrentHashM...
    tomas家的小撥浪鼓閱讀 2,008評論 0 6
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,455評論 0 16
  • 高考前 一心想去杭州,我所知道的杭州,無現(xiàn)金之城,杭州電子科技大學(xué),上有天堂下有蘇杭,圖書館,西湖,那是我想去的地...
    千鳥和她閱讀 505評論 2 6
  • 剛在拼多多給女兒敗了一雙涼鞋,團(tuán)購價(jià)好便宜,才12.9,第一次在拼多多平臺上買東西,收到貨看下質(zhì)量怎么樣,如果可以...
    向往精靈閱讀 230評論 0 0
  • 在幼兒園工作了好幾年,帶了好幾屆畢業(yè)生。有的至今還在聯(lián)系,甚至于后來和學(xué)生家長成了無話不談的朋友。在這朋友中有個(gè)...
    回憶夢中閱讀 160評論 0 2

友情鏈接更多精彩內(nèi)容