Это может быть дублирующий вопрос, но я нашел эту часть кода в книге о concurrency. Это называется потокобезопасным:
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;
}
}
}
С моей точки зрения (concurrency новички) поток t1 и поток t2 могут читать currentCount = 1
. Тогда оба потока могут изменить значение карты на 2. Может ли кто-нибудь объяснить мне, подходит ли код или нет?