码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentHashMap扩容

时间:2019-04-15 19:40:52      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:自己   -o   cimage   长度   idt   hash   因此   data-   ima   

然后,说说精华的部分。

  1. Cmap 支持并发扩容,实现方式是,将表拆分,让每个线程处理自己的区间。如下图:
 
技术图片
 

假设总长度是 64 ,每个线程可以分到 16 个桶,各自处理,不会互相影响。

  1. 而每个线程在处理自己桶中的数据的时候,是下图这样的:
 
技术图片
 

扩容前的状态。

当对 4 号桶或者 10 号桶进行转移的时候,会将链表拆成两份,规则是根据节点的 hash 值取于 length,如果结果是 0,放在低位,否则放在高位。

因此,10 号桶的数据,黑色节点会放在新表的 10 号位置,白色节点会放在新桶的 26 号位置。

下图是循环处理桶中数据的逻辑:

 
技术图片
 

处理完之后,新桶的数据是这样的:

 
技术图片




ConcurrentHashMap扩容

标签:自己   -o   cimage   长度   idt   hash   因此   data-   ima   

原文地址:https://www.cnblogs.com/twoheads/p/10712349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!