Dies kann eine doppelte Frage sein, aber ich habe diesen Teil des Codes in einem Buch über Nebenläufigkeit gefunden. Dies soll die Threadsicher:Java ConcurrentHashMap Aktionen Atomizität
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;
}
}
}
Aus meiner (Concurrency Anfänger) Sicht Gewinde t1 und Faden t2 beide currentCount = 1
lesen konnte. Dann könnten beide Threads den Wert der Karte auf 2 ändern. Kann mir bitte jemand erklären, ob der Code in Ordnung ist oder nicht?
Sie in Java hinzugefügt wurde vielen Dank, ich glaube, ich verstehe es jetzt. :) –