0Pricing
Java Academy · Leçon

Modèle de concurrence structurée

Traitez les tâches liées comme une unité

Modèle de concurrence structurée est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Qu'est-ce que la concurrence structurée

La concurrence structurée (JEP 453, en préversion) traite un groupe de tâches concurrentes liées comme une seule unité de travail.

Si la tâche parente se divise en sous-tâches, celles-ci doivent toutes se terminer avant que la tâche parente poursuive son exécution, comme dans la portée d'un bloc de code ordinaire.

Le problème qu'elle résout

Avec des exécuteurs bruts, une tâche lancée peut survivre à son créateur, provoquer une fuite ou être oubliée. Les erreurs d'une branche peuvent passer inaperçues tandis que les autres continuent de s'exécuter.

Cela entraîne des fuites de threads, du travail orphelin et une gestion des échecs difficile à comprendre.

Les tâches forment un arbre

La concurrence structurée impose une relation parent-enfant. Les sous-tâches forment un arbre dont la racine est la tâche qui les a lancées.

  • Une sous-tâche ne peut pas survivre à la portée de sa tâche parente
  • La tâche parente attend que tous ses enfants se terminent
  • L'annulation se propage vers le bas de l'arbre

Reproduire le code séquentiel

L'idée essentielle est que le code concurrent doit se lire comme du code séquentiel. Une portée s'ouvre, le travail est divisé et la portée ne se ferme qu'une fois toutes les tâches terminées.

Les durées de vie deviennent ainsi évidentes et les erreurs faciles à analyser.

L'ancienne approche non structurée

Voici une approche familière mais non structurée utilisant un exécuteur ordinaire. Elle fonctionne, mais rien ne garantit que les deux tâches asynchrones partagent une durée de vie coordonnée.

import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) throws Exception {
        try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
            Future<String> user = exec.submit(() -> "Ada");
            Future<Integer> order = exec.submit(() -> 7);
            System.out.println(user.get() + " has " + order.get() + " orders");
        }
    }
}

Pourquoi la coordination est importante

Dans l'exemple précédent, si la récupération de l'utilisateur échoue, la tâche de récupération de la commande continue inutilement. Vous devez l'annuler manuellement et gérer les exceptions de chaque appel à get().

La concurrence structurée automatise cette coordination.

Statut de préversion

La concurrence structurée est fournie comme une interface de programmation en préversion dans le paquet java.util.concurrent. Pour l'utiliser, vous devez compiler et exécuter le programme avec --enable-preview.

La classe centrale est StructuredTaskScope, qui sera présentée dans la prochaine leçon.

Garanties de durée de vie

Dans un scope structuré :

  • Toutes les sous-tâches se terminent, échouent ou sont annulées avant la fin du scope
  • Aucune sous-tâche ne s'échappe en arrière-plan
  • La pile d'appels reflète la véritable hiérarchie des tâches dans les instantanés de fils d'exécution

Avantage en matière d'observabilité

Comme l'arbre des sous-tâches est explicite, les outils du JDK peuvent l'afficher. Un instantané de fils d'exécution regroupe les sous-tâches sous leur scope parent, ce qui facilite bien davantage le diagnostic que des fils d'exécution dispersés dans des pools.

Fonctionne bien avec les fils d'exécution virtuels

Chaque sous-tâche d'un scope structuré s'exécute par défaut sur son propre fil d'exécution virtuel. Le faible coût des fils d'exécution virtuels permet de répartir efficacement le travail entre de nombreuses sous-tâches.

Ces deux fonctionnalités ont été conçues pour fonctionner de concert.

Modèle mental

Imaginez un scope structuré comme un bloc try avec gestion automatique des ressources pour la concurrence : vous l'ouvrez, vous lancez le travail avec fork, vous effectuez join pour attendre, puis vous le fermez. L'accolade fermante garantit qu'aucune tâche ne continue de s'exécuter.

Vérification rapide

Vérifiez votre compréhension du principe fondamental.

Récapitulatif

Vous avez découvert le modèle de concurrence structurée :

  • Les tâches liées forment un arbre associé à la durée de vie d'un scope
  • Le code concurrent se lit comme du code séquentiel
  • Il s'agit d'une API en aperçu qui nécessite --enable-preview
  • Elle s'associe naturellement aux fils d'exécution virtuels

Ensuite : l'API StructuredTaskScope elle-même.

Questions Fréquemment Posées

La leçon « Modèle de concurrence structurée » est-elle gratuite ?

Oui — le texte complet de « Modèle de concurrence structurée » 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 « Modèle de concurrence structurée » ?

Traitez les tâches liées comme une unité 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 1 sur 4.

Combien de temps prend la leçon « Modèle de concurrence structurée » ?

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