Questa potrebbe essere una domanda doppia, ma ho trovato questa parte di codice in un libro sulla concorrenza. Questo si dice che sia thread-safe:Atomica Java ConcurrentHashMap atomicity
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;
}
}
}
Dalle mie (principianti concorrenza) punto di vista, filo t1 e filo t2 poteva sia in lettura currentCount = 1
. Quindi entrambi i thread potrebbero cambiare il valore delle mappe a 2. Qualcuno può spiegarmi se il codice è ok o no?
ringrazio molto, credo di capire ora. :) –