Concurrency Experte

Von unsicherer Thread-Beendigung zu kooperativem Abbruch

Thread.stop() und Ad-hoc-Flags durch unterbrechungsbewusste Aufgabenabbrüche ersetzen.

✕ Forced thread termination
Thread worker = new Thread(this::runTask);
worker.start();

// May stop the thread while shared state is inconsistent.
worker.stop();
✓ Future cancellation
Future<?> worker = executor.submit(this::runTask);

// Requests interruption; the task must cooperate.
worker.cancel(true);
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🛡

Bewahrt Invarianten

Aufgaben stoppen nur an Codepfaden, die für den Abbruch ausgelegt sind.

🧩

Einheitliche Steuerung

Future stellt Ausführung, Abschluss und Abbruch gemeinsam dar.

🔗

Komponierbar

Unterbrechung funktioniert mit Blocking-Queues, Locks, Executors und virtuellen Threads.

Alter Ansatz
Thread.stop()
Moderner Ansatz
Future.cancel(true)
Seit JDK
5
Schwierigkeitsgrad
Experte
Von unsicherer Thread-Beendigung zu kooperativem Abbruch
Verfügbar

Future und ExecutorService sind seit JDK 5 (Sept. 2004) verfügbar.

Thread.stop() kann Code beenden, während er Monitore besitzt oder gemeinsam genutzten Zustand aktualisiert, wodurch Objekte beschädigt bleiben können. Moderne Abbruchsteuerung ist kooperativ: Das Future mit Unterbrechung abbrechen, InterruptedException weiterleiten, wo möglich, den Unterbrechungsstatus wiederherstellen, wenn dies nicht möglich ist, und die Aufgabe so gestalten, dass sie sichere Abbruchpunkte erreicht.