Od niebezpiecznego zatrzymywania wątków do kooperatywnego anulowania
Zastąp Thread.stop() i doraźne współdzielone flagi anulowaniem zadań świadomym przerwań.
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);
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.
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.