java基础之谈谈ConcurrentHashMap的扩容机制

谈谈ConcurrentHashMap的扩容机制

jdk1.7中

  • concurrentHashMap是基于Segment分段实现的
  • 每个Segment相对于一个小型的HashMap
  • 每个Segment内部都会进行扩容,和HashMap的扩容逻辑类似
  • 先生成新的数组,然后转移元素到新数组中
  • 扩容的判断也是每个Segment内部单独判断的,判断是否超过了阀值

jdk1.8中

  • concurrentHashMap不再基于Segment实现
  • 当某个线程进行put时,如果发现concurrentHashMap正在进行扩容那么该线程会一起进行扩容
  • 当某个线程put时,发现没有正在进行扩容,则将key-value添加到concurrentHashMap中,然后判断是否超过了阀值,超过了则进行扩容
  • concurrentHashMap是支持多线程同时扩容的。
  • 扩容之前也会先生成一个新的数组
  • 在转移元素时,会将原数组分组,将每组分给不同的线程来进行元素的转移,每个线程负责一组或者多组的元素转移工作。
posted @ 2022-07-23 19:00  King-DA  阅读(511)  评论(0)    收藏  举报