0Pricing
Java Academy · Leçon

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 fork pour lancer une ou plusieurs sous-tâches, chacune renvoyant une référence Subtask
  • Utiliser join pour 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() :

  • SUCCESS avec un résultat fourni par get()
  • FAILED avec l'exception fournie par exception()
  • UNAVAILABLE si 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 échoue
  • ShutdownOnSuccess : 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.java
  • java --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, join et enfin get
  • 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

  1. Modèle de concurrence structurée
  2. StructuredTaskScope
  3. Arrêt en cas d’échec ou de réussite
  4. Gestion des erreurs et annulation
← Retour à Java Academy