pp.05.01-CounterAtomic
Counter mit Atomics threadsicher machen
- Projekt:
pp.05.01-CounterAtomic
- Bearbeitungszeit: 20 Minuten
- Musterlösung: 10 Minuten
- Kompatibilität: mindestens Java SE 10
Quellcode von pp.Counter
Die Klasse Counter
ist nicht threadsicher, da ++
und --
keine atomaren Operationen für int
sind:
Aufgaben
- Schreiben Sie jeweils einen Testfall um
inc
unddec
zu testen.
Mit den Testfällen soll demonstriert werden, dassCounter
nicht threadsicher ist. Das kann bspw. dadurch erreicht werden, dass an demselben Objektinc
aus zwei unterschiedlichen Threads heraus aufgerufen wird. Formulieren Sie die Testfälle so, dass sie scheitern, wenn sich die Race-Condition jeweils auswirkt. Lassen Sie die Testfälle mehrfach laufen und überzeugen Sie sich davon, dass die Klasse tatsächlich nicht threadsicher ist.
Achtung: Abwesenheit von Fehlerbeobachtung ist kein Beweis für Korrektheit. - Machen Sie
Counter
durchsynchronized
threadsicher. - Lassen Sie die Testfälle erneut ablaufen und überzeugen Sie sich davon, dass sie nun erfolgreich laufen
Achtung: Abwesenheit von Fehlerbeobachtung ist kein Beweis für Korrektheit. - Machen Sie
Counter
mit einemAtomicInteger
undcompareAndSet
threadsicher. - Lassen Sie die Testfälle erneut ablaufen und überzeugen Sie sich davon, dass sie nun erfolgreich laufen
Achtung: Abwesenheit von Fehlerbeobachtung ist kein Beweis für Korrektheit. - Vergleichen Sie die Ausführungszeit der Testfälle.
- Machen Sie
Counter
mit einemAtomicInteger
undin/decrementAndGet
odergetAndDe/Increment
threadsicher. - Lassen Sie die Testfälle erneut ablaufen und überzeugen Sie sich davon, dass sie nun erfolgreich laufen
Achtung: Abwesenheit von Fehlerbeobachtung ist kein Beweis für Korrektheit.