Java7中ConcurrentHashMap使用的就是锁分段技术,ConcurrentHashMap由多个Segment组成(Segment下包含很多Node,也就是我们的键值对了),每个Segment都有把锁来实现线程安全,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
Java8中的锁的粒度比Java7中更细了,Java8锁住的一个某一个数组元素table[i](头节点,该头结点类型是链表头结点或红黑树的头结点),而Java7中segment锁住的是一个HashEntry数组,相当于锁住了多个数组元素;所以我感觉Java8中ConcurrentHashMap多线程环境下 put效率更高。
网友评论