You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多线程并发访问时Caffeine缓存值无法读取问题求助

多线程并发访问时Caffeine缓存值无法读取

快速复现

运行CacheTest::threadedTest()即可复现问题

需求背景

一个耗时IO方法会被多线程频繁并发访问,计划通过L1缓存缓解压力。

当前实现

现有多个职责明确的类:

  • CaffeineConfig:缓存TTL为300秒
  • CacheHelper:获取缓存的AtomicInteger,若从缓存取值则不递增该整数
  • Worker:负责获取AtomicInteger
  • Manager:通过ScheduledExecutorService启动A、B、C三个线程Worker执行任务
  • CacheTest:模拟Manager类的行为

预期结果

Manager启动后,第一个Worker获取值0并缓存,后续第二个、第三个Worker应从缓存读取值0。

实际结果

Manager启动后,第一个Worker获取值0并缓存,但第二个、第三个Worker获取到的是递增后的值,而非缓存值。

排查发现

  • 在运行过程中新增Worker,能正常读取缓存值;
  • 该异常仅在多线程同时访问缓存时出现;
  • 曾推测可能是ThreadLocal导致缓存未在Worker间共享,但无法理解其关联逻辑。

求助问题

是否有遇到相同问题的开发者?恳请分享解决方案。

内容的提问来源于stack exchange,提问作者EthanAlef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:02:05