我想知道如何在使用putIfAbsent()方法时使用Cache2k缓存。例如,在ConcurrentHashMap中,可以使用如下方法:
Set<X> set = map.get(name);
if (set == null) {
final Set<X> value = new HashSet<X>();
set = map.putIfAbsent(name, value);
if (set == null) {
set = value;
}
}(复制自Should you check if the map containsKey before using ConcurrentMap's putIfAbsent)
Cache2K版本返回一个布尔值。这意味着什么?当多个线程使用相同的键插入值时,这会告诉我什么。
任何帮助都将是非常感谢的,因为我有点不确定如何处理这个问题。我使用的是最新版本0.26-BETA。
谢谢,并致以最良好的问候,迈克尔
发布于 2016-07-19 15:24:48
putIfAbsent()相当于:
if (!cache.containsKey(key)) {
cache.put(key, value);
return true;
} else {
return false;
}只是它是原子地执行的。
如果插入了值(这意味着它以前不存在),则该方法返回true。因为它是原子地执行的,所以只有成功插入该值的线程才能获得真正的值。
注意,如果注册的话,可以调用一个作者。如果该值已经存在,则不会调用写入器。
该方法的语义与JCache/JSR107 107完全相同。这种行为可能不是对所有情况都有意义,也可能是直观的。参见https://github.com/jsr107/jsr107spec/issues/303中的讨论。
如果您愿意,请尝试在另一个问题中解释您的用例或您想要的缓存语义,这样我们就可以讨论什么是最好的方法。
https://stackoverflow.com/questions/38397825
复制相似问题