為什么要用ConcurrentHashMap? ConcurrentHashMap是JUC包下的一個線程安全的HashMap類,我們都知道多線程的場景下要用ConcurrentHashMap來代替HashMap使用,有沒有想過為什么不能用HashMap,為什么能用ConcurrentHashMap呢
ConcurrentHashMap是JUC(Java Util Concurrent)包下的一個線程安全的HashMap類。在多線程場景下,我們通常選擇使用ConcurrentHashMap來替代HashMap。但為什么不能直接使用HashMap呢?為什么ConcurrentHashMap可以勝任多線程環(huán)境呢?接下來,我將通過源碼分析的方式,帶領大家深入探討其中的一些細節(jié)。
HashMap是基于數組的一種數據結構,在JDK 1.8中,HashMap以數組+鏈表/紅黑樹的形式存在。然而,在多線程任務中對HashMap進行操作可能會導致并發(fā)異常。這一點可以從下圖中的nextNode方法源碼中得到明顯的解釋。當多個線程同時進行put操作時,可能存在并發(fā)異常的風險。
接著我們看到,nextNode方法中的if條件判斷中的兩個變量是做什么用的呢?為什么這兩個變量不相同時就會拋出異常呢?
小編推薦閱讀count(*)、count(1)哪個更快?面試必問:通宵整理的十道經典MySQL必問面試題
閱讀強化學習筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀OpenAI官方開源多智能體框架Swarm,社區(qū)反響熱烈
閱讀Vue-Vben-Admin:功能強大的Vue3后臺管理系統(tǒng)模板
閱讀llama.cpp:一個適用于中小型研發(fā)企業(yè)的高性能CPU/GPU大語言模型推理框架
閱讀