為什么要用ConcurrentHashMap? ConcurrentHashMap是JUC包下的一個線程安全的HashMap類,我們都知道多線程的場景下要用ConcurrentHashMap來代替HashMap使用,有沒有想過為什么不能用HashMap,為什么能用ConcurrentHashMap呢
ConcurrentHashMap是JUC(Java Util Concurrent)包下的一個線程安全的HashMap類。在多線程場景下,我們通常選擇使用ConcurrentHashMap來替代HashMap。但為什么不能直接使用HashMap呢?為什么ConcurrentHashMap可以勝任多線程環(huán)境呢?接下來,我將通過源碼分析的方式,帶領(lǐng)大家深入探討其中的一些細(xì)節(jié)。
HashMap是基于數(shù)組的一種數(shù)據(jù)結(jié)構(gòu),在JDK 1.8中,HashMap以數(shù)組+鏈表/紅黑樹的形式存在。然而,在多線程任務(wù)中對HashMap進(jìn)行操作可能會導(dǎo)致并發(fā)異常。這一點可以從下圖中的nextNode方法源碼中得到明顯的解釋。當(dāng)多個線程同時進(jìn)行put操作時,可能存在并發(fā)異常的風(fēng)險。
接著我們看到,nextNode方法中的if條件判斷中的兩個變量是做什么用的呢?為什么這兩個變量不相同時就會拋出異常呢?
小編推薦閱讀機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實現(xiàn)對象集合與DataTable的相互轉(zhuǎn)換
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動態(tài)代理的對比分析
閱讀Win11筆記本“自動管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)