gpt4 book ai didi

java - 使用 ConcurrentHashMap,什么时候需要同步?

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:42 24 4
gpt4 key购买 nike

我有一个 ConcurrentHashMap,我在其中执行以下操作:

sequences = new ConcurrentHashMap<Class<?>, AtomicLong>();

if(!sequences.containsKey(table)) {
synchronized (sequences) {
if(!sequences.containsKey(table))
initializeHashMapKeyValue(table);
}
}

我的问题是 - 有没有必要多做一些

if(!sequences.containsKey(table))

检查同步块(synchronized block)内部,以便其他线程不会初始化相同的 hashmap 值?

也许检查是必要的,但我做错了?我这样做似乎有点傻,但我认为这是必要的。

最佳答案

所有 ConcurrentHashMap 上的操作都是线程安全的,但线程安全操作不可组合。您试图使一对操作成为原子操作:检查 map 中的某些内容,如果不存在,则将某些内容放在那里(我假设)。所以你的问题的答案是,你需要再次检查,你的代码看起来没问题。

关于java - 使用 ConcurrentHashMap,什么时候需要同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851624/

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