Concurrency Avancé

Gérez le cycle de vie des tâches concurrentes comme une seule unité de travail.

✕ Java 8
ExecutorService exec =
    Executors.newFixedThreadPool(2);
Future<User> u = exec.submit(this::fetchUser);
Future<Order> o = exec.submit(this::fetchOrder);
try {
    return combine(u.get(), o.get());
} finally { exec.shutdown(); }
✓ Java 25 (Preview)
try (var scope = new StructuredTaskScope
        .ShutdownOnFailure()) {
    var u = scope.fork(this::fetchUser);
    var o = scope.fork(this::fetchOrder);
    scope.join().throwIfFailed();
    return combine(u.get(), o.get());
}
Un problème avec ce code ? Dites-le nous.
🛡️

Sans fuites de threads

Toutes les tâches bifurquées se terminent avant la fermeture de la portée.

Échec rapide

ShutdownOnFailure annule les tâches sœurs si l'une échoue.

📐

Structure claire

Le cycle de vie de la tâche correspond à la portée lexicale dans le code.

Ancienne Approche
Cycle de vie manuel des threads
Approche Moderne
StructuredTaskScope
Depuis JDK
25
Difficulté
Avancé
Concurrence structurée
Aperçu

Aperçu dans JDK 25 (cinquième aperçu, JEP 505). Nécessite --enable-preview.

La concurrence structurée traite un groupe de tâches concurrentes comme une seule opération. Si une sous-tâche échoue, les autres sont annulées. La portée garantit qu'il n'y a pas de fuites de threads et établit des relations claires parent-enfant.

Partager 𝕏 🦋 in