gpt4 book ai didi

java - ConcurrentMap 不一致

转载 作者:行者123 更新时间:2023-12-01 12:23:55 25 4
gpt4 key购买 nike

ConcurrentMap 的 JavaDoc - putIfAbsent 说:

  /**
* If the specified key is not already associated
* with a value, associate it with the given value.
* This is equivalent to
*
* if (!map.containsKey(key))
* return map.put(key, value);
* else
* return map.get(key);
*
* except that the action is performed atomically.
*/

但是 putIfAbsent(来自 ConcurrentMap)和 put(来自 Map)都返回前一个值(如果没有前一个值,则返回 null)。因此,在示例中,当映射不包含该键时,将返回 null。这是代码的正确意图吗?返回“value”不是更好吗?

最佳答案

API 很可能是这样设计的,这样您就可以区分以前没有映射(并且更新成功)的情况和以前存在映射但映射到完全相同的.

询问这是否比获取新值更实际并没有帮助。我有时也偶然发现了这种行为。但 API 自 Java 5 起就存在,以这种方式指定,并且不会更改。

顺便说一下,Java 8 的 Map.computeIfAbsent如果先前不存在映射,则通过返回计算值,其行为将更像您所期望的。

关于java - ConcurrentMap 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com