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

Java并发进阶系列:深度讨论jdk1.8 ConcurrentHashMap并发环境下transfer方法桶位分配过程

在前面有多篇关于jdk1.8的ConcurrentHashMap研究是基于源代码给出的深度分析,要知道多线程环境下的ConcurrentHashMap内部运行机制是相对复杂的,好在IDEA提供的相关断点和Debug功能确实好用,使得多线程调试起来直观,通过这种方式能加深多线程操作CHM的执行流程。

前期准备

这部内容请参考文章中的小节部分,本文不再累赘。

使用埋点打印法观测

此方法相对繁琐,难度并不大,要求使用者对源代码设计足够理解,否则埋点位置不佳影响观测效果

1、测试代码

packageconcurrent.demo;publicclassResizeStampBugTest{publicstaticvoidmain(String[]args){// 设置64个线程并发putintmaxThreads=64;// 初始容量为8,内部会被调整为16ConcurrentHashMap<Long,String>map=newConcurrentHashMap<>(8);for(inti=0;i<maxThreads;i++){Threadt=newThread(()->map.put(Thread.currentThread().getId(),Thread.currentThread().getName()));t.setName("Thread-"+i);t.start();// 因为多个线程并发执行不方便查看打印结果,可以让前一个线程领先后面线程一丁点,以便观察打印结果,当然也可以不需要,多执行几次看看打印结果即可。// Thread.sleep(1);}}}

可以看到这里ConcurrentHashMap类用的是项目concurrent.demo包下的ConcurrentHashMap.java 源码文件

2、更改桶位分配步长,将源码的16改为4,方便观察

privatestaticfinalintMIN_TRANSFER_STRIDE=4;// private static final int MIN_TRANSFER_STRIDE = 16;

3、transfer方法加入打印每个线程分配的桶位区间

elseif(U.compareAndSwapInt(this,TRANSFERINDEX,nextIndex,nextBound=(nextIndex>stride?nextIndex-stride:0))){bound=nextBound;i=nextIndex-1;advance=false;// 以下三行是新增代码Strings=String.format(
http://www.jsqmd.com/news/1283166/

相关文章:

  • 【工具-Visual Studio Code】
  • 洛阳前锋热水器售后维修电话全新专属升级公告 - 科技先行者
  • 2026年7月水泥制品厂家有哪些,化粪池/水泥制品消防井/成品检查井/水泥制品隔油池/水泥制品雨水井,水泥制品工厂推荐 - 品牌推荐师
  • 2026 年新消息:金平知名的管网抢修疏通企业哪家靠谱,楼下的下水道突然冒臭水?别慌,这玩意儿半小时就能搞定!-三禾市政工程 - 企业官方推荐【认证】
  • 广州番禺区搬家公司怎么选?健身房搬家收费明细,跑步机杠铃重型器械搬运流程、真实案例与选择指南 - 厚道搬家
  • LM2596、MP2307与数控降压模块实测对比:效率、纹波与选型指南
  • 抖音批量下载终极指南:3个超简单步骤掌握无水印视频批量保存技巧
  • 正式推出洛阳华生热水器售后维修电话全新专属升级公告 - 科技先行者
  • 星火应用商店完整指南:5个技巧让Linux软件管理变得简单
  • SonarQube误报调优实战:从规则冲突到精准豁免
  • 曲柄压力机的离合器和制动系统设计
  • 植物大战僵尸杂交版(最新版)
  • PolarDB(阿里云)VS HaishanDB(海山数据库,移动云)的AI能力全面对比
  • C++ std::list深度解析:双向链表原理、性能对比与高效应用场景
  • 节假日机票太贵?掌握方法,教你怎么买便宜机票轻松出行 - 工具软件使用方法推荐
  • 【AI课程笔记整理黄金法则】:20年AI教育专家亲授,97%学员忽略的5个致命误区
  • QT自定义控件之化学工艺流程图
  • 天河珠江新城大平层精细化搬家计费方式,全屋收纳打包入户复位完整服务案例解析 - 厚道搬家
  • 抖音图文无水印保存方法详解 2026合规教程与工具风险提醒 - 免费软件工具方法教程
  • IPD中的扫地僧(TDT技术开发团队),都在扫什么?
  • NGC_综述_导航制导与控制
  • 【Linux Mint 深度学习开发环境搭建】多深度学习框架融合环境
  • 交换机测评命令
  • 本地部署DeepSeek模型与Codex集成:打造私有化AI编程助手
  • 3分钟学会ModTheSpire:杀戮尖塔模组加载器的终极使用指南
  • 节假日火车票怎么买便宜?学会方法,高峰期也能省一笔 - 工具软件使用方法推荐
  • 美团酒店预订,省钱达人的实用节省技巧 - 工具软件使用方法推荐
  • Bash脚本进阶技巧与自动化实践指南
  • 全自动颗粒吨袋包装机十大品牌厂家推荐,广州恒尔赋能企业产能跨越式攀升 - 品牌速递
  • 2026甄选:门店翻新修复领域专业品牌机构 - 优企名品