guava/caffeine/ 中的 ConcurrentHashMap 计算?缓存

ConcurrentHashMap compute in guava/caffeine/? cache

从Java8开始我们可以在ConcurrentHashMap上使用.compute*方法来同步key的处理,这样如果两个线程同时对同一个key执行.compute*方法,回调依然会一个接一个地执行,而不是同时执行。但 ConcurrentHashMap 不提供缓存通常允许的及时删除数据的能力。

Guava/Caffeine 缓存提供了根据时间自动删除值的能力,但是你没有那种基于键的同步处理的讨厌的特性,如在 ConcurrentHashMap 中(你可以使用 asMap 方法获取 ConcurrentMap,但是.compute* 实现不提供基于键的同步)

我的目标是像在 ConcurrentHashMap 中那样通过键进行同步处理,并且像在 Guava/Caffeine 中那样通过时间进行删除。

在 Java 中实现它的最佳方法是什么?

我对 Caffeine 的看法是错误的 - 它支持计算的原子操作。 从 21 版本开始添加了对 Guava 的支持。