Concurrency Avancé

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.

✕ 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);
Un problème avec ce code ? Dites-le nous.
🛡

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.

Ancienne Approche
Thread.stop()
Approche Moderne
Future.cancel(true)
Depuis JDK
5
Difficulté
Avancé
De l'arrêt non sécurisé des threads à l'annulation coopérative
Disponible

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.