Java ConcurrentHashMap 操作原子性
2022-09-04 20:37:36
这可能是一个重复的问题,但我在一本关于并发性的书中发现了这部分代码。这被认为是线程安全的:
ConcurrentHashMap<String, Integer> counts = new ...;
private void countThing(String thing) {
while (true) {
Integer currentCount = counts.get(thing);
if (currentCount == null) {
if (counts.putIfAbsent(thing, 1) == null)
break;
} else if (counts.replace(thing, currentCount, currentCount + 1)) {
break;
}
}
}
从我(并发初学者)的角度来看,线程 t1 和线程 t2 都可以读取 。然后,两个线程都可以将映射的值更改为 2。有人可以解释一下代码是否正常吗?currentCount = 1