发布时间:2026/8/14 21:38:49
Java ConcurrentHashMap 实战:computeIfAbsent 重入死锁、原子累加与 size 为什么不准 Java ConcurrentHashMap 实战:computeIfAbsent 重入死锁、原子累加与 size 为什么不准很多人把ConcurrentHashMap当成「加了锁的 HashMap」,以为随便用都线程安全。实际上它只保证单个方法调用的原子性,一旦你把「读—改—写」拆成几步,或者在computeIfAbsent里再动这个 map,坑就来了。这篇讲三个真实踩过的问题。陷阱一:先 get 再 put 不是原子操作统计词频最容易写出这种代码:// 错误:get 和 put 之间可能被其他线程插队,计数丢失ConcurrentHashMapString,IntegermapnewConcurrentHashMap();Integercmap.get(word);map.put(word,cnull?1:c1);get和put各自线程安全,但组合起来有竞态:两个线程同时读到 5,各自 1 写回 6,少算一次。ConcurrentHashMap帮不了你,因为它根本不知道这两次调用要绑在一起。正确做法是用一次原子调用完成累加。计数场景首选merge:// 正确:merge 内部对该 key 加锁,读改写是原子的map.merge(word,1,Integer::sum);或者用getOrDefault是只读的、compute系列是原子的,别把它们和裸put混着用。陷阱二:computeIfAbsent 里再碰同一个 map 死锁/异常computeIfAbsent会对当前 key 所在的桶加锁,然后执行你的 lambda。如果 lambda 里又去写同一个 map,轻则抛异常,重则活锁。经典翻车:递归建缓存。// 危险:mappingFunction 里又调了 computeIfAbsentmap.computeIfAbsent(a,k-{map.computeIfAbsent(b,k2-compute(k2));// 可能死锁/IllegalStateExceptionreturncompute(k);});Java 9 对这种自引用会抛IllegalStateException: Recursive update,更早的版本可能直接卡死。修法是把「计算」和「放入」拆开,计算过程不碰 map:// 先算好,再原子放入Valuevmap.get(key);if(vnull){ValuecomputedexpensiveCompute(key);// 纯计算,不碰 mapvmap.putIfAbsent(key,computed);// 已存在就用别人放的if(vnull)vcomputed;}putIfAbsent返回旧值:返回 null 说明是你放进去的,非 null 说明别人先放了,用它的即可,天然去重。陷阱三:size() 是估算值,别拿去做精确判断高并发下size()/isEmpty()返回的是某一瞬间的近似值,不保证和「此刻真实元素数」一致。下面这种「满了就停」的逻辑会出错:// 不可靠:size() 在并发写入时可能读到旧值if(map.size()MAX)return;// 可能已经超了,也可能还没到map.put(key,val);如果你需要「容量上限」这种强一致语义,ConcurrentHashMap本身不提供,应该用带计数的原子变量或专门的限流结构。size()只适合做监控、日志这类容忍误差的场景。顺带一提:原子累加用 LongAdder 更快如果只是全局计数(不是按 key 分组),别用ConcurrentHashMap存一个 key,直接上LongAdder,高并发下比AtomicLong少了 CAS 自旋冲突:LongAddercounternewLongAdder();counter.increment();// 内部分段累加,竞争小longtotalcounter.sum();小结ConcurrentHashMap只保证单次方法调用原子,get之后再put会丢更新;计数用merge(key, 1, Integer::sum)。computeIfAbsent的 lambda 里绝不能再写同一个 map,Java 9 会抛Recursive update;拆成「先算后 putIfAbsent」。size()/isEmpty()是估算值,不能用来做精确的容量判断。记忆点:读改写要合并成一次原子调用,计算逻辑别塞进 compute 的 lambda 里。

相关新闻

2026/8/14 21:38:49

信号与系统考研强化指南:吴大正教材核心考点与专题突破

在考研复习的冲刺阶段,信号与系统这门课常常让很多同学感到“又爱又恨”。爱的是它的逻辑性强,体系完整;恨的是概念抽象,题型多变,尤其是面对吴大正老师这本经典教材,如何从厚厚的书本中提炼出核心考点&…

2026/8/14 22:28:54

Claude代码命令实战指南:10个提升AI编程效率的核心技巧

1. 引言:为什么Claude的代码命令值得深挖?如果你和我一样,日常开发、调试或者处理文本时,Claude已经成了离不开的助手。我们最熟悉的,可能就是那个聊天框,输入问题,等待它生成代码、解释逻辑或者…

2026/8/14 22:28:54

用一段视频,换出一个可以自由走动的世界

你有没有试过这样的场景:刷到一段朋友随手拍的旅行视频,镜头晃晃悠悠地扫过一座古镇的石板路,你突然特别想知道,如果镜头往左边多拍一点、往前再走十步,会看到什么。可惜视频已经拍完了,那个"如果&quo…

2026/8/14 22:28:54

VTJ项目模型系统:从愿景到落地的结构化项目管理框架

1. 项目概述:VTJ项目模型系统的核心价值在项目管理、产品研发乃至复杂的系统设计领域,我们常常面临一个困境:想法很多,但落地时却一团乱麻。需求、任务、模块、依赖关系、进度状态……这些信息散落在不同的文档、表格、即时通讯工…

2026/8/14 22:28:54

视频里的动作,AI是怎么“看懂“的:双流网络的故事

2014年,深度学习已经在图像识别上打得风生水起了。AlexNet横空出世才两年,卷积神经网络在ImageNet上把传统方法按在地上摩擦,准确率一路飙升。按理说,这套打法拿到视频上应该也能横扫一切才对,毕竟视频不就是一张张图片…

2026/8/14 22:28:54

2014年,一段视频教会了神经网络“看动作“

2012年,AlexNet在ImageNet图像分类比赛上一鸣惊人,深度学习一夜之间成了计算机视觉领域的显学。识别一张静态图片里是猫是狗,卷积神经网络突然变得比谁都强。但如果你把问题从"这张图片里是什么"换成"这段视频里发生了什么&qu…

2026/8/14 22:23:54

内容创作与分发平台:技术架构、工作流与未来展望

1. 项目概述:一个“故事出口”的诞生昨天,一个看似简单的“出口”被打开了。这个标题——“他们不缺故事,缺的是一个让故事飞出去的出口——昨天,这个出口开了”——背后,指向的绝不仅仅是一个新功能或新按钮的上线。它…

2026/8/14 4:27:24

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/14 4:27:24

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/14 0:00:09

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:09

VSCode高效Git管理:从入门到实战技巧

1. 为什么选择VSCode进行Git代码管理作为微软推出的轻量级代码编辑器,Visual Studio Code(简称VSCode)已经成为全球开发者使用率最高的编辑器之一。根据2023年Stack Overflow开发者调查,VSCode的市场占有率高达74.48%。它内置的Gi…

2026/8/14 4:27:24

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/14 4:27:24

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/14 4:27:24

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…