java基础之谈谈ConcurrentHashMap的扩容机制
谈谈ConcurrentHashMap的扩容机制
jdk1.7中
- concurrentHashMap是基于Segment分段实现的
- 每个Segment相对于一个小型的HashMap
- 每个Segment内部都会进行扩容,和HashMap的扩容逻辑类似
- 先生成新的数组,然后转移元素到新数组中
- 扩容的判断也是每个Segment内部单独判断的,判断是否超过了阀值
jdk1.8中
- concurrentHashMap不再基于Segment实现
- 当某个线程进行put时,如果发现concurrentHashMap正在进行扩容那么该线程会一起进行扩容
- 当某个线程put时,发现没有正在进行扩容,则将key-value添加到concurrentHashMap中,然后判断是否超过了阀值,超过了则进行扩容
- concurrentHashMap是支持多线程同时扩容的。
- 扩容之前也会先生成一个新的数组
- 在转移元素时,会将原数组分组,将每组分给不同的线程来进行元素的转移,每个线程负责一组或者多组的元素转移工作。
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/16512773.html

浙公网安备 33010602011771号