1.7版本
1.
1.7版本的ConcurrentHashMap是基于Segment分段实现的
2.
每个Segment相对于⼀个⼩型的HashMap
3.
每个Segment内部会进⾏扩容,和HashMap的扩容逻辑类似
6
4.
先⽣成新的数组,然后转移元素到新数组中
5.
扩容的判断也是每个Segment内部单独判断的,判断是否超过阈值
1.8版本
1.
1.8版本的ConcurrentHashMap不再基于Segment实现
2.
当某个线程进⾏put时,如果发现ConcurrentHashMap正在进⾏扩容那么该线程⼀起进⾏扩容
3.
如果某个线程put时,发现没有正在进⾏扩容,则将key-value添加到ConcurrentHashMap中,然
后判断是否超过阈值,超过了则进⾏扩容
4.
ConcurrentHashMap是⽀持多个线程同时扩容的
5.
扩容之前也先⽣成⼀个新的数组
6.
在转移元素时,先将原数组分组,将每组分给不同的线程来进⾏元素的转移,每个线程负责⼀组或
多组的元素转移⼯作