Von unsicherer Thread-Beendigung zu kooperativem Abbruch
Thread.stop() und Ad-hoc-Flags durch unterbrechungsbewusste Aufgabenabbrüche ersetzen.
Thread worker = new Thread(this::runTask); worker.start(); // May stop the thread while shared state is inconsistent. worker.stop();
Future<?> worker = executor.submit(this::runTask); // Requests interruption; the task must cooperate. worker.cancel(true);
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.
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.