Concurrence structurée
Gérez le cycle de vie des tâches concurrentes comme une seule unité de travail.
Comparaison de Code
✕ 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.
Pourquoi la méthode moderne gagne
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é
Support JDK
Concurrence structurée
Aperçu
Aperçu dans JDK 25 (cinquième aperçu, JEP 505). Nécessite --enable-preview.
Comment ça fonctionne
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.
Documentation Associée