关闭

ConcurrentHashMap的存储结构

瞎溜达 1年前 ⋅ 188 阅读
  • Java7中ConcurrentHashMap使用的分段锁,也就是每一个Segment上同时只有一个线程可以操作,每一个Segment都是一个类似HashMap数组的结构,它可以扩容,它的冲突会转化为链表。但是Segment的个数一旦初始化就不能改变,默认Segment的个数是16个。
  • Java8中ConcurrentHashMap使用的Synchronized锁加CAS机制。结构也由Java7中的Segment数组+HashEntry数组+链表改为Node数组+链表/红黑树,Node是类似于一个HashEntry的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。

全部评论: 0

    我有话说: