gpt4 book ai didi

java - 同步写入两个集合

转载 作者:行者123 更新时间:2023-11-29 09:30:48 25 4
gpt4 key购买 nike

如果 map 还不存在,我需要为 map 赋予一些值(value)。 key->value(如果设置)应该总是在两个集合中(即 put 应该原子地发生在两个映射中)。我尝试按如下方式实现:

private final ConcurrentMap<String, Object> map1 = new ConcurrentHashMap<String, Object>();
private final ConcurrentMap<String, Object> map2 = new ConcurrentHashMap<String, Object>();

public Object putIfAbsent(String key) {
Object retval = map1.get(key);
if (retval == null) {
synchronized (map1) {
retval = map1.get(key);
if (retval == null) {
Object value = new Object(); //or get it somewhere
synchronized (map2) {
map1.put(key, value);
map2.put(key, new Object());
}
retval = value;
}
}
}
return retval;
}

public void doSomething(String key) {
Object obj1 = map1.get(key);
Object obj2 = map2.get(key);
//do smth
}

在所有情况下都能正常工作吗?谢谢

最佳答案

几个问题:

  • 不要使用“双重检查锁定”。快速谷歌搜索将显示大量文章,这些文章解释了这种技术的问题。只需检查 synchronized阻止。
  • 你不需要同步map1map2 .只使用其中之一。
  • doSomething 内同步.确保在用于同步的相同对象上进行同步 putIfAbsent .

关于java - 同步写入两个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12789737/

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