栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ConcurrentHashMap put vs putIfAbsent

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ConcurrentHashMap put vs putIfAbsent

因此,它不会更新键的值。这样对吗?

那是正确的。它将返回地图中已经存在的当前值。

这对于添加和更新缓存会更好吗?

有几件事可以使您的实现更好。

1.
您不应该使用putIfAbsent来测试它是否存在,只有在要确保then不存在时才应使用它

putIfAbsent
。相反,您应该使用
map.get
它来测试它的存在(或map.contains)。

    V local = _cache.get(key);    if (local.equals(value) && !local.IsExpired()) {        return;    }

2.
您将要替换而不是put,这是因为可能发生竞争情况,其中

if
两个或多个线程可以将其评估为false,其中两个(或多个)线程中的一个将覆盖另一个线程的puts。

你可以做的反而是取代

说完一切后,它看起来可能像这样

public void AddToCache(T key, V value) {    for (;;) {        V local = _cache.get(key);        if(local == null){ local = _cache.putIfAbsent(key, value); if(local == null)     return;        }        if (local.equals(value) && !local.IsExpired()) { return;        }        if (_cache.replace(key, local, value)) return;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402131.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号