为什么要用ConcurrentHashMap? ConcurrentHashMap是JUC包下的一个线程安全的HashMap类,我们都知道多线程的场景下要用ConcurrentHashMap来代替HashMap使用,有没有想过为什么不能用HashMap,为什么能用ConcurrentHashMap呢
ConcurrentHashMap是JUC(Java Util Concurrent)包下的一个线程安全的HashMap类。在多线程场景下,我们通常选择使用ConcurrentHashMap来替代HashMap。但为什么不能直接使用HashMap呢?为什么ConcurrentHashMap可以胜任多线程环境呢?接下来,我将通过源码分析的方式,带领大家深入探讨其中的一些细节。
HashMap是基于数组的一种数据结构,在JDK 1.8中,HashMap以数组+链表/红黑树的形式存在。然而,在多线程任务中对HashMap进行操作可能会导致并发异常。这一点可以从下图中的nextNode方法源码中得到明显的解释。当多个线程同时进行put操作时,可能存在并发异常的风险。
接着我们看到,nextNode方法中的if条件判断中的两个变量是做什么用的呢?为什么这两个变量不相同时就会抛出异常呢?
小编推荐阅读[python][selenium] Web UI自动化切换iframe框架以及浏览器操作切换窗口和处理弹窗
阅读使用VSCode搭建UniApp + TS + Vue3 + Vite项目
阅读musl libc 与 glibc 在 .NET 应用程序中的兼容性
阅读受 LabelImg 启发的基于 web 的图像标注工具,基于 Vue 框架
阅读光影精灵10 Win1+Ubuntu18.04 双系统 踩坑记录
阅读LoRA模型:小型Stable Diffusion模型的微调技术
阅读肉夹馍(Rougamo)编译时AOP组件介绍及IoC/DI扩展
阅读