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