番石榴/咖啡因/中的ConcurrentHashMap计算?快取

时间:2019-09-06 12:03:25

标签: java concurrency guava caffeine

由于Java 8可以在ConcurrentHashMap上使用.compute *方法来按键同步处理,因此,如果两个线程同时在同一键上执行.compute *方法,则回调将仍然依次执行而不是不执行同时。但是ConcurrentHashMap不能提供缓存通常允许的及时删除数据的功能。

番石榴/咖啡因缓存提供了基于时间自动删除值的功能,但是您没有像ConcurrentHashMap那样具有基于键的同步处理的讨厌功能(您可以使用asMap方法获得ConcurrentMap,但是.compute *实现不提供基于密钥的同步)

我的目标是既要像ConcurrentHashMap中一样通过键来处理同步,又要像Guava / Caffeine中那样按时间来进行删除。

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

1 个答案:

答案 0 :(得分:0)

对于咖啡因,我错了-它支持通过计算实现原子操作。 从21版本开始添加了番石榴支持。