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
incunddeczu testen.
Mit den Testfällen soll demonstriert werden, dassCounternicht threadsicher ist. Das kann bspw. dadurch erreicht werden, dass an demselben Objektincaus 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
Counterdurchsynchronizedthreadsicher. - 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
Countermit einemAtomicIntegerundcompareAndSetthreadsicher. - 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
Countermit einemAtomicIntegerundin/decrementAndGetodergetAndDe/Incrementthreadsicher. - 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.