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、在转移元素时,先将原数组分组,将每组分给不同的线程来进行元素的转移,每个线程负责一组或多组的元素转移工作