ConcurrentHashMap:
特点:(JDK7)
1.ConcurrentHashMap使用的是分段(segment)锁+Lock锁
2.线程安全性上来看,ConcurrentHashMap比之前的Hashtable、Collections.synchronizedMap(m)都有所提高
它使用的是锁分离技术,使用多个锁来控制对hash表的不同段(segment)进行修改,采用ReentrantLock锁(重入锁)来实现
如果修改发生在不同段上,可以并发进行,提高了效率
特点:(JDK8)
ConcurrentHashMap在JDK8中做了较大的变化
它摒弃了分段锁的概念,采用一种全新的方式:使用synchronized+CAS 实现无锁化操作
底层是数组+链表+红黑树的方式,与JDK8中HashMap一样,但是它又在此基础上,为了做到并发,又增加了很多辅助的类:TreeBin、Traverser等对象内部类
底层源码部分:
源码部分我看了一下这个博主写的很好,可以参考一下
咸鱼的梦想:(Java多线程–并发中集合的使用之ConcurrentHashMap)
https://blog.youkuaiyun.com/hello_worldee/article/details/77880349
链接直达