Zähler mit Synchronisation

Intermediate Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

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

  1. Verlorene Inkremente ohne Schutz erklären.
  2. Lese- und Schreibmethoden unter dieselbe Sichtbarkeitsregel stellen.
  3. 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.

University approvals: 0
Tasks
Question 1

Implementiere increment() und get() synchronisiert.

Hint

synchronized steht in der Methodensignatur vor dem Rückgabetyp. Instanzfelder sind in beiden Methoden direkt zugänglich.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Question 2

Warum genügt volatile int count nicht für count++?

Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Intermediate
  • Completed: 0 users
Creator
Best
Best
BestBuddy