De l'arrêt non sécurisé des threads à l'annulation coopérative
Remplacez Thread.stop() et les indicateurs partagés ad hoc par une annulation de tâche consciente des interruptions.
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);
Préserve les invariants
Les tâches ne s'arrêtent qu'aux points de code conçus pour l'annulation.
Contrôle standard
Future représente ensemble l'exécution, l'achèvement et l'annulation.
Composable
L'interruption fonctionne avec les files bloquantes, les verrous, les executors et les threads virtuels.
Future et ExecutorService sont disponibles depuis JDK 5 (sept. 2004).
Thread.stop() peut arrêter le code alors qu'il détient des moniteurs ou met à jour un état partagé, laissant des objets endommagés. L'annulation moderne est coopérative. Annulez le Future avec interruption, propagez InterruptedException lorsque possible, restaurez le statut d'interruption lorsque cela n'est pas possible, et concevez la tâche pour atteindre des points d'annulation sûrs.