Java Academy · Les

StructuredTaskScope

Subtaken forken en samenvoegen

Les 2 van 413 stappen

StructuredTaskScope is een gratis Java Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Maak kennis met StructuredTaskScope

StructuredTaskScope is de belangrijkste API voor gestructureerde concurrency. Je opent een bereik, voert fork uit voor deeltaken, gebruikt join om erop te wachten en leest vervolgens hun resultaten.

Het is een preview-functie, dus compileer en voer uit met --enable-preview.

De basislevenscyclus

Elk gebruik volgt hetzelfde ritme van vier stappen:

  • Open het bereik in een try-with-resources-blok
  • Voer voor een of meer deeltaken fork uit; elke deeltaak retourneert een handle van het type Subtask
  • Voer join uit om op voltooiing te wachten
  • Lees het resultaat van elke deeltaak via get()

fork retourneert een handle

fork(Callable) start de deeltaak onmiddellijk op een virtuele thread en retourneert een Subtask. Je mag de get() ervan pas aanroepen nadat join() is teruggekeerd.

Een volledig voorbeeld

Hier worden twee deeltaken gelijktijdig uitgevoerd. Beide moeten zijn voltooid voordat we de resultaten lezen. Hierbij wordt ShutdownOnFailure gebruikt, een ingebouwde beleidsregel.

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");
        }
    }
}

Eerst join, dan lezen

De volgorde ligt vast: fork, vervolgens join en daarna get. Als je get() van een deeltaak aanroept voordat join() is voltooid, wordt IllegalStateException opgegooid.

Dankzij deze regel blijft de levensduur gestructureerd.

Statussen van deeltaken

Na join() rapporteert elke Subtask een state():

  • SUCCESS met een resultaat van get()
  • FAILED met de uitzondering van exception()
  • UNAVAILABLE als de deeltaak nooit is voltooid

Veel deeltaken

Je kunt zo veel deeltaken als je wilt starten met fork; elke deeltaak krijgt een eigen virtuele thread. Zo spreid je een batch onafhankelijke aanroepen.

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);
        }
    }
}

Het bereik beheert de threads

Het bereik implementeert AutoCloseable. Wanneer het try-blok eindigt, zorgt close() ervoor dat elke thread van een deeltaak is beëindigd. Lekken zijn niet mogelijk.

Daarom gebruik je het altijd binnen try-with-resources.

Ingebouwde beleidsregels

De JDK levert twee kant-en-klare afsluitbeleidsregels:

  • ShutdownOnFailure: annuleer de overige deeltaken als een deeltaak mislukt
  • ShutdownOnSuccess: annuleer de overige deeltaken zodra er één slaagt

Je kunt ook een subklasse van StructuredTaskScope maken voor aangepaste logica.

join vanuit dezelfde thread

Alleen de thread die het bereik heeft geopend, mag er deeltaken in forken en join aanroepen. Deeltaken blijven beperkt tot hun bijbehorende bereik, waardoor de boom correct opgebouwd blijft.

Opties voor compileren en uitvoeren

Omdat de API een preview is, bouw je met:

  • javac --release 21 --enable-preview Main.java
  • java --enable-preview Main

Zonder de optie krijg je een compilatie- of uitvoeringsfout.

Korte controle

Denk aan de verplichte aanroepvolgorde.

Samenvatting

Je hebt de API StructuredTaskScope geleerd:

  • Open het bereik in try-with-resources, voer fork uit, daarna join en vervolgens get
  • Elke deeltaak wordt uitgevoerd op een eigen virtuele thread
  • Het bereik garandeert dat alle deeltaken worden beëindigd voordat het wordt gesloten
  • --enable-preview is vereist

Volgende: de beleidsregels voor afsluiten bij mislukking en afsluiten bij succes in detail.

Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “StructuredTaskScope” gratis?

Ja — de volledige tekst van “StructuredTaskScope” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “StructuredTaskScope”?

Subtaken forken en samenvoegen Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “StructuredTaskScope”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Het model van gestructureerde concurrency
  2. StructuredTaskScope
  3. Afsluiten bij fouten en succes
  4. Foutafhandeling en annulering
← Terug naar Java Academy