当前位置: 首页 > news >正文

ConcurrentHashMap put/get/扩容操作

1.put操作
  • 计算key的hash值
  • 如果table为null,则初始化table
  • 如果当前正在扩容,则会协助扩容操作,然后再重新执行put操作
  • 如果table对应槽位为空,则通过CAS操作插入节点。如果CAS成功,则插入成功;如果CAS失败,则表明其它线程已经插入了节点,则继续后续的操作
  • 如果对应位置不为空,则使用synchronized锁住该桶的第一个节点,然后遍历链表或者红黑树,在链表或红黑树中执行插入或更新操作
  • 插入后,如果链表的长度超过了8,且数组的长度>=64,则将链表转化为红黑树
  • 插入完成后,判断是否需要扩容。若需要,则扩容
2.get操作

get操作不需要加锁,实际存储数据的Node节点的value字段和next字段都是通过volatile修改的,保证了可见性,所以可以做到无锁并发读

3.扩容操作

当table的元素数量达到阈值时,需要进行扩容。ConcurrentHashMap支持多线程并发进行,扩容时会给不同的线程分配桶区间来并发扩容。扩容期间,如果有其它的线程在执行put操作,则会帮助进行迁移。
迁移过程中,首先会使用synchronized锁住桶的头节点,然后进行迁移。迁移完成后,将原数组的该桶位置设置为ForwardingNode,表示已迁移(其它线程put时,如果发现是forwardingNode,则会转而协助扩容)。迁移时,将桶中的节点根据hash值重新计算在新数组中的位置。由于新数组容量是原数组的2倍,所以每个节点在新数组中的位置要么是原位置,要么是原位置+原数组长度。

http://www.dtcms.com/a/444100.html

相关文章:

  • 知名自助建站平台微商城开发公司
  • 国内高端网站危机舆情公关公司
  • 网站设计说明书主要有什么大型网站制作教程
  • 龙华区住房和建设局网站官网镇江网站建设方式优化
  • 高新网站设计找哪家学网站建设 去哪里
  • 自学网站建设和seo会员管理网站建设
  • 观澜网站建设公司h5网页
  • 网站建设 通知申请号的网站
  • 流程设计网站江苏住房和城乡建设部网站
  • 网站服务器建立上海闵行刚刚发生的
  • 手机怎么制作网站教程视频教程网站识别手机电脑自动跳转
  • 东乡建设网站华强北 做网站
  • 怎么样建设一个电影网站全国企业年报网上申报
  • 怎么做能让网站尽快收录佛山企业门户网站建设
  • 麦吉太原网站建设丽怎么代理企业网站托管趋势
  • wordpress博客站点深圳市建设工程造价管理站
  • 杭州建站价格在安庆哪里可以做公司网站
  • 怎么给网站添加关键词semir是什么牌子衣服
  • seo网站诊断分析报告局域网聊天工具报告
  • 邯郸网站设计定制王占山图片
  • 知名的网络公司seo最新优化技术
  • 有没一些网站只做临床药学营销软件站
  • C++智能指针(Smart Pointer)是什么?
  • 单页网站seo专业公司网站建设服务公司
  • 深圳团购网站设计公司网站查询系统怎么做
  • 学生求职网站的需求分析怎么做廊坊建设网站企业
  • 网站建设 运营深圳市政设计院
  • 营销最好的网站建设公司it培训网站模板
  • 如何给别人做网站赚钱7 the wordpress
  • 做视频网站多少钱wordpress 下拉列表