ConcurrentHashMap底层执行原理

ConcurrentHashMap底层是通过cas机制保证线程安全;采用无锁化的机制保证数组初始化的线程安全呢;
Compare And Swap: CAS保证对某个操作线程安全
先创建数组,每个数组下标对应的节点有可能会创建链表,当链表数量超过8时(并不是超过8就转,需要总结点超过64时)会转红黑树(左旋和右旋(二叉法))

ConcurrentHashMap初始化默认大小是16,第一次put的时候会初始化大小,
当数据量存储超过75%(加载因子,扩容因子,负载因子) 也就是12个时候会进行扩容一倍,变为32;

在扩容的时候也会存在并发安全问题,
例如:t1正在扩容中,t2现在开始put
解决方案:
当有线程进行扩容的时候,其他线程想要put时是不让put的;
当有线程扩容的时候,其他线程先暂停put,(扩容不需要加锁)

扩容过程:
当t1扩容中 会将头节点moved的值修改为-1,此时其他线程会暂停put
t1扩容后会将数据从扩容前的数组搬运到扩容后的数组中,
在搬运过程中,其他线程现在想要put时要暂停put,为了提高效率,其他暂停put的后cpu等待会浪费,此时会帮助t1进行搬运,搬运是先领取任务(搬运哪些数据),领取任务后就会帮助t1搬运(帮助搬运过程中也会添加锁)。

t1扩容完成后会返回一个新的集合,

 

 

 

 

 

 

 

 

 

 

 

 

 

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值