Concurrency Zaawansowany

Od niebezpiecznego zatrzymywania wątków do kooperatywnego anulowania

Zastąp Thread.stop() i doraźne współdzielone flagi anulowaniem zadań świadomym przerwań.

✕ 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);
Widzisz problem z tym kodem? Daj nam znać.
🛡

Zachowuje niezmienniki

Zadania zatrzymują się tylko w ścieżkach kodu zaprojektowanych do anulowania.

🧩

Standardowa kontrola

Future reprezentuje wykonanie, ukończenie i anulowanie razem.

🔗

Komponowalność

Przerwanie działa z kolejkami blokującymi, blokadami, executorami i wątkami wirtualnymi.

Stare podejście
Thread.stop()
Nowoczesne podejście
Future.cancel(true)
Od JDK
5
Poziom trudności
Zaawansowany
Od niebezpiecznego zatrzymywania wątków do kooperatywnego anulowania
Dostępne

Future i ExecutorService są dostępne od JDK 5 (wrzesień 2004)

Thread.stop() może zakończyć kod, gdy ten posiada monitory lub aktualizuje współdzielony stan, pozostawiając obiekty uszkodzone. Nowoczesne anulowanie jest kooperatywne. Anuluj Future z przerwaniem, propaguj InterruptedException tam, gdzie to możliwe, przywróć status przerwania, gdy nie można go propagować, i zaprojektuj zadanie tak, aby osiągało bezpieczne punkty anulowania.