gpt4 book ai didi

java - 为什么 ConcurrentHashMap.putifAbsent 是安全的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:41 37 4
gpt4 key购买 nike

从昨天开始,我一直在阅读并发性知识,我不太了解...但是有些事情开始变得清晰...
我理解为什么双重检查锁定不安全(我想知道这种罕见情况发生的概率是多少)但是 volatile 修复了 1.5 + 中的问题......
但我想知道 putifAbsent

是否会发生这种情况

喜欢...

myObj = new myObject("CodeMonkey");
cHashM.putIfAbsent("keyy",myObj);

那么当另一个线程执行 cHashM.get() 时,这是否确保 myObj 将被 100% 初始化???因为它可能有一个未完全初始化的引用(双重检查锁问题)

最佳答案

如果您调用 concurrentHashMap.get(key) 并且它返回一个对象,则该对象保证被完全初始化。每个 put(或 putIfAbsent)都将获得一个特定于桶的锁,并将该元素附加到桶的条目中。

现在您可能会检查代码并注意到 get 方法没有获得同样的锁。所以你可以争辩说可能有过时的阅读,这也不是真的。这里的原因是条目本身中的值是易变的。因此,您一定会获得最新的阅读资料。

关于java - 为什么 ConcurrentHashMap.putifAbsent 是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997245/

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