首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cache.putIfAbsent()在Cache2k中的正确使用

cache.putIfAbsent()在Cache2k中的正确使用
EN

Stack Overflow用户
提问于 2016-07-15 13:51:16
回答 1查看 791关注 0票数 1

我想知道如何在使用putIfAbsent()方法时使用Cache2k缓存。例如,在ConcurrentHashMap中,可以使用如下方法:

代码语言:javascript
复制
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。

谢谢,并致以最良好的问候,迈克尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 15:24:48

putIfAbsent()相当于:

代码语言:javascript
复制
if (!cache.containsKey(key)) {
  cache.put(key, value);
  return true;
} else {
  return false;
}

只是它是原子地执行的。

如果插入了值(这意味着它以前不存在),则该方法返回true。因为它是原子地执行的,所以只有成功插入该值的线程才能获得真正的值。

注意,如果注册的话,可以调用一个作者。如果该值已经存在,则不会调用写入器。

该方法的语义与JCache/JSR107 107完全相同。这种行为可能不是对所有情况都有意义,也可能是直观的。参见https://github.com/jsr107/jsr107spec/issues/303中的讨论。

如果您愿意,请尝试在另一个问题中解释您的用例或您想要的缓存语义,这样我们就可以讨论什么是最好的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38397825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档