我有一张地图。为了更新密钥,我需要检查它是否已经存在。否则,我需要创建一个新对象并将其放入。
Map<K,Foo> map = new ConcurrentHashMap<K, Foo>();
我的功能是这个
put(Object value) {
if(!map.containsKey(K key)) {
map.put(key, new Foo());
} else {
Foo modifiedFoo = modifyFoo(map.get(key));
map.put(key, modifiedFoo));
}
}
我不想使用同步。我猜它可能会被转换成Map<K,AtomicReference<Foo>> map = new ConcurrentHashMap<K, AtomicReference<Foo>>()
并做value.compareAndSet(old, new)
where value
is type AtomicReference<Foo>
。然而,有两件事。密钥不存在的情况如何处理?以及如何在新旧 Foo 对象之间进行比较?