为什么要用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条件判断中的两个变量是做什么用的呢?为什么这两个变量不相同时就会抛出异常呢?
小编推荐阅读