Zähler mit Synchronisation
Implementiere einen thread-sicheren Inkrementzähler mit synchronized.
Wo gebraucht
Minimalbeispiel für Shared Mutable State. In Produktion oft AtomicInteger oder Striped/LongAdder bei hoher Kontention.
Vertiefung
Ein synchronisierter Zähler schützt Lesen und Schreiben des Werts durch denselben Monitor. Die Inkrementoperation muss als Einheit behandelt werden, weil sie aus mehreren Maschinen- und Sprachoperationen besteht. Auch eine Methode wie get benötigt Synchronisation oder eine andere Sichtbarkeitsgarantie.
Für einen einzelnen Zähler bieten atomare Klassen oft eine kompaktere Lösung. Sobald mehrere Felder gemeinsam eine Invariante bilden, reicht ein atomarer Einzelwert jedoch nicht. Dann muss der gesamte Zustandsübergang als kritischer Abschnitt modelliert werden.
Schwierigkeitsstufen
- Verlorene Inkremente ohne Schutz erklären.
- Lese- und Schreibmethoden unter dieselbe Sichtbarkeitsregel stellen.
- Zwischen synchronized, AtomicInteger und LongAdder abwägen.
Fallstricke
volatile macht ein zusammengesetztes Inkrement nicht atomar. LongAdder eignet sich für hohe Aktualisierungsrate, liefert während konkurrierender Änderungen aber keinen atomaren Schnappschuss wie ein streng koordinierter Zähler.
Tasks
Card Info
- Topic: Algorithmen und Datenstrukturen
- Difficulty: Intermediate
- Completed: 0 users