為什么要用ConcurrentHashMap? ConcurrentHashMap是JUC包下的一個(gè)線程安全的HashMap類,我們都知道多線程的場(chǎng)景下要用ConcurrentHashMap來(lái)代替HashMap使用,有沒(méi)有想過(guò)為什么不能用HashMap,為什么能用ConcurrentHashMap呢
ConcurrentHashMap是JUC(Java Util Concurrent)包下的一個(gè)線程安全的HashMap類。在多線程場(chǎng)景下,我們通常選擇使用ConcurrentHashMap來(lái)替代HashMap。但為什么不能直接使用HashMap呢?為什么ConcurrentHashMap可以勝任多線程環(huán)境呢?接下來(lái),我將通過(guò)源碼分析的方式,帶領(lǐng)大家深入探討其中的一些細(xì)節(jié)。
HashMap是基于數(shù)組的一種數(shù)據(jù)結(jié)構(gòu),在JDK 1.8中,HashMap以數(shù)組+鏈表/紅黑樹(shù)的形式存在。然而,在多線程任務(wù)中對(duì)HashMap進(jìn)行操作可能會(huì)導(dǎo)致并發(fā)異常。這一點(diǎn)可以從下圖中的nextNode方法源碼中得到明顯的解釋。當(dāng)多個(gè)線程同時(shí)進(jìn)行put操作時(shí),可能存在并發(fā)異常的風(fēng)險(xiǎn)。
接著我們看到,nextNode方法中的if條件判斷中的兩個(gè)變量是做什么用的呢?為什么這兩個(gè)變量不相同時(shí)就會(huì)拋出異常呢?
小編推薦閱讀探索Avalonia框架與開(kāi)源控件庫(kù)的魅力
閱讀園子會(huì)員福利:華為云服務(wù)器一年免費(fèi)領(lǐng)取
閱讀構(gòu)建人工智能模型基礎(chǔ):TFDS和Keras的完美搭配
閱讀創(chuàng)建鴻蒙應(yīng)用的橫屏顯示直尺應(yīng)用全程解析
閱讀WiFi基礎(chǔ)(七):WiFi漫游與WiFi組網(wǎng)
閱讀遷移學(xué)習(xí):人工智能模型訓(xùn)練的絕學(xué)
閱讀如何使用 Pytorch 中的 DataSet 和 DataLoader
閱讀golang slice相關(guān)常見(jiàn)的性能優(yōu)化手段
閱讀連接Elasticsearch服務(wù)器的Python代碼示例
閱讀國(guó)產(chǎn)操作系統(tǒng)上實(shí)現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器
閱讀使用Python讀取和導(dǎo)出NetCDF格式的多時(shí)相柵格文件
閱讀多租戶系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計(jì)與RuoYi系統(tǒng)的借鑒
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)