Java Academy · Lektion

StructuredTaskScope

Starta och sammanfoga deluppgifter.

Lektion 2 av 413 steg

StructuredTaskScope är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.

Möt StructuredTaskScope

StructuredTaskScope är kärn-API:t för strukturerad samtidighet. Ni öppnar ett scope, forkar deluppgifter, joinar för att vänta på dem och läser sedan deras resultat.

Det är en förhandsgranskningsfunktion, så kompilera och kör med --enable-preview.

Den grundläggande livscykeln

Varje användning följer samma rytm i fyra steg:

  • Öppna scopet i ett try-with-resources-block
  • forka en eller flera deluppgifter, där varje uppgift returnerar ett Subtask-handtag
  • joina för att vänta på att de ska slutföras
  • Läs resultatet för varje deluppgift via get()

Fork returnerar ett handtag

fork(Callable) startar omedelbart deluppgiften på en virtuell tråd och returnerar ett Subtask. Ni får inte anropa dess get() förrän join() har returnerat.

Ett komplett exempel

Här körs två deluppgifter samtidigt. Båda måste slutföras innan vi läser resultaten. Exemplet använder ShutdownOnFailure, en inbyggd policy.

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 och läs sedan

Ordningsregeln är strikt: fork, then join, then get. Om ni anropar get() på en deluppgift innan join() är klar kastas IllegalStateException.

Det är denna regel som håller livstiden strukturerad.

Deluppgifternas tillstånd

Efter join() rapporterar varje Subtask ett state():

  • SUCCESS med ett resultat från get()
  • FAILED med undantaget från exception()
  • UNAVAILABLE om den aldrig slutfördes

Många deluppgifter

Ni kan forka så många deluppgifter ni vill; varje deluppgift får en egen virtuell tråd. Det är så ni förgrenar en grupp oberoende anrop.

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

Scopet ansvarar för trådarna

Scopet är ett AutoCloseable. När try-blocket avslutas ser close() till att tråden för varje deluppgift har avslutats. Inga läckor kan uppstå.

Därför använder ni det alltid i ett try-with-resources-block.

Inbyggda policyer

JDK levereras med två färdiga avslutningspolicyer:

  • ShutdownOnFailure: avbryt resten om någon deluppgift misslyckas
  • ShutdownOnSuccess: avbryt resten så snart en deluppgift lyckas

Ni kan också skapa en subklass av StructuredTaskScope för anpassad logik.

Samma tråd joinar

Endast tråden som öppnade scopet får forka deluppgifter i det och anropa join. Deluppgifter är bundna till sitt ägande scope, vilket håller trädet välformat.

Flaggor för kompilering och körning

Eftersom API:t är en förhandsgranskning bygger ni med:

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

Utan flaggan får ni ett kompilerings- eller körningsfel.

Snabbtest

Kom ihåg den obligatoriska anropsordningen.

Sammanfattning

Ni har lärt er API:t StructuredTaskScope:

  • Öppna i try-with-resources, fork, join och sedan get
  • Varje deluppgift körs på en egen virtuell tråd
  • Scopet garanterar att alla deluppgifter avslutas innan det stängs
  • Kräver --enable-preview

Nästa steg är en djupgående genomgång av policyerna för avslutning vid misslyckande och vid lyckat resultat.

Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”StructuredTaskScope” gratis?

Ja – hela texten till ”StructuredTaskScope” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”StructuredTaskScope”?

Starta och sammanfoga deluppgifter. Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”StructuredTaskScope”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Modellen för strukturerad samtidighet
  2. StructuredTaskScope
  3. Avslut vid fel och framgång
  4. Felhantering och avbrytning
← Tillbaka till Java Academy