- Java7中ConcurrentHashMap使用的分段锁,也就是每一个Segment上同时只有一个线程可以操作,每一个Segment都是一个类似HashMap数组的结构,它可以扩容,它的冲突会转化为链表。但是Segment的个数一旦初始化就不能改变,默认Segment的个数是16个。
- Java8中ConcurrentHashMap使用的Synchronized锁加CAS机制。结构也由Java7中的Segment数组+HashEntry数组+链表改为Node数组+链表/红黑树,Node是类似于一个HashEntry的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。
注意:本文归作者所有,未经作者允许,不得转载