2018-07-27 13:33:34 +08:00

949 B
Raw Blame History

java基础

HashMap和ConcurrentHashMap

HashMap和ConcurrentHashMap的最主要的区别就是前者是线程不安全后者是线程安全的。在不同的JDK版本中区别也不一样

JDK1.7中:

HashMap使用链表法来实现hash冲突节点的存储。ConcurrentHashMap使用Segment 数组存储数据Segment 通过继承 ReentrantLock 来进行加锁。

JDK1.8中:

HashMap重复hash值的链表元素超过8个就改成红黑树实现

ConcurrentHashMap 不用segment,改成CAS+synchronized方法实现。

CAS 的含义是“我认为原有的值应该是什么,如果是,则将原有的值更新为新值,否则不做修改,并告诉我原来的值是多少”

参考文档: