ConcurrentHashMap的扩容机制

283 阅读1分钟

1.7 版本

1、ConcurrentHashMap是基于Segment分段实现的

2、每个Segment相对于一个小型的HashMap

3、每个Segment内部会进行扩容,和HashMap的扩容逻辑类似

4、先生成新的数组,然后转移元素到新数组中

5、扩容的判断也是每个Segment内部单独判断的,判断是否超过阈值

1.8版本

1、ConcurrentHashMap不再是基于Segment实现

2、当某个线程进行put时,如果发现ConcurrentHashMap正在进行扩容那么该线程一起进行扩容

3、如果某个线程put时,发现没有正在进行扩容,则将key-value添加到ConcurrentHashMap中,然后判断是否超过阈值,找过了进行扩容。

4、ConcurentHashMap是支持多个线程同时进行扩容的

5、扩容之前也是先生产一个新的数组

6、在转移元素时,先将原数组分组,将每组分给不同的线程来进行元素的转移,每个线程负责一组或多组的元素转移工作