-
我在多线程里共用一个 HashMap 做缓存,某天线上 CPU 突然飙到 100% 卡死、线程全堆在 HashMap.get 上,我抓着线程栈复盘了大半天的惨痛经历
我的服务用一个 HashMap 当本地缓存、多线程并发读写,平时好好的,某天线上 CPU 毫无征兆飙到 100% 且降不下来、服务卡死。jstack 一抓头皮发麻:好几个线程死死卡在 HashMap.get 的 for 循环里出不来——死循环。深挖才懂:HashMap 线程不安全,多线程并发 put 同时触发扩容,JDK7 头插法迁移节点时并发把链表指针搞乱、接成 A→B→A→B 的环形链表,此后…- 2
- 0
-
ConcurrentHashMap.computeIfAbsent 嵌套调用导致 CPU 100% 的真实事故复盘
线上 Java 服务 CPU 100% 全线程卡死,jstack 看全堆在 ConcurrentHashMap.computeIfAbsent。本文讲清楚桶级 synchronized 嵌套调用的活锁原理 + 最小复现 + 5 种修法 + JMH 性能对比 + 排查 checklist。结论:缓存层一律用 Caffeine。- 0
- 0
ConcurrentHashMap
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!


