ConcurrentHashMap

基于JDK1.8的ConcurrentHashMap的源碼分析:

ConcurrentHashMap是線程安全的瓶埋,利用的是 Node+CAS算法+Synchronized關(guān)鍵字 來保證并發(fā)更新的安全

數(shù)據(jù)機(jī)構(gòu)是:數(shù)組+鏈表+紅黑樹

重要的成員變量:

1、 table:默認(rèn)為null,初始化發(fā)生在第一次插入操作嘀掸,默認(rèn)大小為16的數(shù)組,用來存儲(chǔ)Node節(jié)點(diǎn)數(shù)據(jù),擴(kuò)容時(shí)大小總是2的冪次方。

2鹤树、 nextTable:默認(rèn)為null,擴(kuò)容時(shí)新生成的數(shù)組逊朽,其大小為原數(shù)組的兩倍罕伯。

3、 sizeCtl :默認(rèn)為0叽讳,用來控制table的初始化和擴(kuò)容操作追他,具體應(yīng)用在后續(xù)會(huì)體現(xiàn)出來。

       1) -1 代表table正在初始化

       2) -N 表示有N-1個(gè)線程正在進(jìn)行擴(kuò)容操作

       3) 其余情況:

                ① 如果table未初始化岛蚤,表示table需要初始化的大小邑狸。

                ② 如果table初始化完成,表示table的容量涤妒,默認(rèn)是table大小的0.75倍单雾,居然用這個(gè)公式算0.75(n - (n >>> 2))。
image

4、 Node:保存key铁坎,value及key的hash值的數(shù)據(jù)結(jié)構(gòu)蜂奸。其中value和next都用volatile修飾,保證并發(fā)的可見性硬萍。

image

5、ForwardingNode:一個(gè)特殊的Node節(jié)點(diǎn)围详,hash值為-1朴乖,其中存儲(chǔ)nextTable的引用。只有table發(fā)生擴(kuò)容的時(shí)候助赞,F(xiàn)orwardingNode才會(huì)發(fā)揮作用买羞,作為一個(gè)占位符放在table中表示當(dāng)前節(jié)點(diǎn)為null或則已經(jīng)被移動(dòng)。

image

基本屬性:

image
image
image
image
 注:Unsafe實(shí)例雹食,主要用于反射獲取對(duì)象相應(yīng)的字段畜普。

ConcurrentHashMap JDK1.7和JDK1.8的區(qū)別

image

構(gòu)造函數(shù)有那些:

1.//無參構(gòu)造函數(shù)
    ConcurrentHashMap(){}
2. //可傳初始容器大小的構(gòu)造函數(shù)
    ConcurrentHashMap(int initialCapacity){}
3. //可傳入map的構(gòu)造函數(shù)
    ConcurrentHashMap(Map<? extends K, ? extends V> m) {}
4. //可設(shè)置閾值和初始容量
    ConcurrentHashMap(int initialCapacity, float loadFactor) {}
5. //可設(shè)置初始容量和閾值和并發(fā)級(jí)別
     ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) {}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市群叶,隨后出現(xiàn)的幾起案子吃挑,更是在濱河造成了極大的恐慌,老刑警劉巖街立,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舶衬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赎离,警方通過查閱死者的電腦和手機(jī)逛犹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梁剔,“玉大人虽画,你說我怎么就攤上這事∪俨。” “怎么了码撰?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)众雷。 經(jīng)常有香客問我灸拍,道長(zhǎng),這世上最難降的妖魔是什么砾省? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任鸡岗,我火速辦了婚禮,結(jié)果婚禮上编兄,老公的妹妹穿的比我還像新娘轩性。我一直安慰自己,他們只是感情好狠鸳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布揣苏。 她就那樣靜靜地躺著悯嗓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卸察。 梳的紋絲不亂的頭發(fā)上脯厨,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音坑质,去河邊找鬼合武。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涡扼,可吹牛的內(nèi)容都是我干的稼跳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼吃沪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼汤善!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起票彪,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤红淡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抹镊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锉屈,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年垮耳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颈渊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡终佛,死狀恐怖俊嗽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铃彰,我是刑警寧澤绍豁,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站牙捉,受9級(jí)特大地震影響竹揍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邪铲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一芬位、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧带到,春花似錦昧碉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽四康。三九已至,卻和暖如春狭握,著一層夾襖步出監(jiān)牢的瞬間闪金,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工论颅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毕泌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓嗅辣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親挠说。 傳聞我的和親對(duì)象是個(gè)殘疾皇子澡谭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一蛙奖、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,257評(píng)論 0 16
  • 1.ConcurrentHashmap簡(jiǎn)介 在使用HashMap時(shí)在多線程情況下擴(kuò)容會(huì)出現(xiàn)CPU接近100%的情況...
    huanfuan閱讀 606評(píng)論 0 2
  • 1.HashMap是一個(gè)數(shù)組+鏈表/紅黑樹的結(jié)構(gòu),數(shù)組的下標(biāo)在HashMap中稱為Bucket值杆兵,每個(gè)數(shù)組項(xiàng)對(duì)應(yīng)的...
    誰在烽煙彼岸閱讀 1,018評(píng)論 2 2
  • 一雁仲、集合 1. ConcurrentHashMap 的實(shí)現(xiàn)原理 ConcurrentHashMap 在 JDK 1...
    Java旅行者閱讀 497評(píng)論 0 2
  • 相同點(diǎn): 單列集合,元素不可重復(fù) 不同點(diǎn) 底層存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)不同HashSet底層用的是HashMap哈希表結(jié)構(gòu)存...
    sanqi37閱讀 470評(píng)論 0 0