StructuredTaskScope
Dérivez et joignez des sous-tâches
StructuredTaskScope est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Découvrez StructuredTaskScope
StructuredTaskScope est l'API centrale de la concurrence structurée. Vous ouvrez un scope, vous lancez des sous-tâches avec fork, vous effectuez join pour attendre, puis vous lisez leurs résultats.
Il s'agit d'une fonctionnalité en aperçu ; compilez et exécutez donc avec --enable-preview.
Le cycle de vie de base
Chaque utilisation suit le même rythme en quatre étapes :
- Ouvrir le scope dans un bloc try avec gestion automatique des ressources
- Utiliser
forkpour lancer une ou plusieurs sous-tâches, chacune renvoyant une référenceSubtask - Utiliser
joinpour attendre la fin de l'exécution - Lire le résultat de chaque sous-tâche avec
get()
fork renvoie une référence
fork(Callable) démarre immédiatement la sous-tâche sur un fil d'exécution virtuel et renvoie un Subtask. Vous ne devez appeler son get() qu'après le retour de join().
Un exemple complet
Ici, deux sous-tâches s'exécutent en parallèle. Toutes deux doivent se terminer avant que nous lisions les résultats. Cet exemple utilise ShutdownOnFailure, une stratégie intégrée.
import java.util.concurrent.StructuredTaskScope;
public class Main {
public static void main(String[] args) throws Exception {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
var name = scope.fork(() -> "Grace");
var count = scope.fork(() -> 3);
scope.join();
scope.throwIfFailed();
System.out.println(name.get() + " placed " + count.get() + " orders");
}
}
}join puis lecture
L'ordre est strict : fork, puis join, puis get. Appeler get() sur une sous-tâche avant la fin de join() lève IllegalStateException.
Cette règle maintient la structure de la durée de vie.
États des sous-tâches
Après join(), chaque Subtask indique un state() :
SUCCESSavec un résultat fourni parget()FAILEDavec l'exception fournie parexception()UNAVAILABLEsi l'exécution ne s'est jamais terminée
De nombreuses sous-tâches
Vous pouvez lancer autant de sous-tâches que vous le souhaitez ; chacune obtient son propre fil d'exécution virtuel. C'est ainsi que vous répartissez un lot d'appels indépendants.
import java.util.*;
import java.util.concurrent.StructuredTaskScope;
public class Main {
public static void main(String[] args) throws Exception {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
List<StructuredTaskScope.Subtask<Integer>> tasks = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
final int n = i;
tasks.add(scope.fork(() -> n * n));
}
scope.join();
scope.throwIfFailed();
int total = tasks.stream().mapToInt(StructuredTaskScope.Subtask::get).sum();
System.out.println("Sum of squares 1..5 = " + total);
}
}
}Le scope possède les fils d'exécution
Le scope est un AutoCloseable. À la fin du bloc try, close() garantit que le fil d'exécution de chaque sous-tâche s'est terminé. Aucune fuite n'est possible.
C'est pourquoi vous l'utilisez toujours dans un bloc try avec gestion automatique des ressources.
Stratégies intégrées
Le JDK fournit deux stratégies d'arrêt prêtes à l'emploi :
ShutdownOnFailure: annuler le reste si une sous-tâche échoueShutdownOnSuccess: annuler le reste dès qu'une sous-tâche réussit
Vous pouvez également créer une sous-classe de StructuredTaskScope pour une logique personnalisée.
Le même fil effectue join
Seul le fil d'exécution qui a ouvert le scope peut y lancer des sous-tâches et appeler join. Les sous-tâches restent confinées à leur scope propriétaire, ce qui préserve la validité de l'arbre.
Options de compilation et d'exécution
Comme l'API est en aperçu, construisez le programme avec :
javac --release 21 --enable-preview Main.javajava --enable-preview Main
Sans cette option, vous obtenez une erreur de compilation ou d'exécution.
Vérification rapide
Rappelez-vous l'ordre obligatoire des appels.
Récapitulatif
Vous avez appris à utiliser l'API StructuredTaskScope :
- Ouvrir dans un bloc try avec gestion automatique des ressources, puis utiliser
fork,joinet enfinget - Chaque sous-tâche s'exécute sur son propre fil d'exécution virtuel
- Le scope garantit que toutes les sous-tâches se terminent avant sa fermeture
- Nécessite
--enable-preview
Ensuite : les stratégies d'arrêt en cas d'échec et en cas de réussite, en détail.
Questions Fréquemment Posées
La leçon « StructuredTaskScope » est-elle gratuite ?
Oui — le texte complet de « StructuredTaskScope » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « StructuredTaskScope » ?
Dérivez et joignez des sous-tâches Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « StructuredTaskScope » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modèle de concurrence structurée
- StructuredTaskScope
- Arrêt en cas d’échec ou de réussite
- Gestion des erreurs et annulation