当前位置: 首页 > 图灵资讯 > java面试题> 美团java面试题-ConcurrentHashMap的存储结构是怎样的

美团java面试题-ConcurrentHashMap的存储结构是怎样的

来源:图灵教育
时间:2023-11-07 09:55:55

  问:ConcurrentHashMap的存储结构是怎样的

  答:ConcurrentHashMap在Java7 中使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它的冲突会转化为链表。但是Segment 的个数一但初始化就不能改变,默认 Segment 的个数是 16 个。

  java8 中的 ConcurrnetHashMap 使用的 Synchronized 锁加 CAS 的机制。结构也由Java7 中的Segment 数组 + HashEntry 数组 + 链表 进化成了 Node 数组 + 链表 / 红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突在达到一定大小时会转化成红黑树,在冲突小于一定数量时又会退回链表。