Java Academy · leksjon

Modellen for strukturert samtidighet

Behandle relaterte oppgaver som én enhet

Leksjon 1 av 413 trinn

Modellen for strukturert samtidighet er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva er strukturert samtidighet

Strukturert samtidighet (JEP 453, preview) behandler en gruppe relaterte samtidige oppgaver som én arbeidsenhet.

Hvis den overordnede oppgaven deler seg opp i underoppgaver, må alle underoppgavene fullføres før den overordnede oppgaven går videre, omtrent som et blokkscope i vanlig kode.

Problemet det løser

Med rå executor-er kan en opprettet oppgave leve lenger enn oppretteren, lekke ressurser eller bli glemt. Feil i én gren kan forbli uoppdaget mens de andre fortsetter å kjøre.

Dette fører til trådlekkasjer, foreldreløst arbeid og forvirrende feilhåndtering.

Oppgaver som et tre

Strukturert samtidighet håndhever et foreldre–barn-forhold. Underoppgavene danner et tre med oppgaven som opprettet dem, som rot.

  • En underoppgave kan ikke leve lenger enn det overordnede scopet
  • Den overordnede oppgaven venter til alle underoppgavene er ferdige
  • Avbryting forplanter seg nedover i treet

Speile sekvensiell kode

Hovedideen er at samtidig kode skal kunne leses som sekvensiell kode. Et scope åpnes, arbeidet deles opp, og scopet lukkes først etter at alt er samlet igjen.

Dette gjør levetider tydelige og feil enklere å analysere.

Den gamle, ustrukturerte måten

Her er en kjent, men ustrukturert tilnærming med en vanlig executor. Den fungerer, men ingenting garanterer at de to future-objektene har en koordinert levetid.

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

Hvorfor koordinering er viktig

I eksempelet over fortsetter ordreoppgaven å kjøre uten nytte hvis det oppstår en feil ved henting av brukeren. Du må avbryte den manuelt og håndtere unntak fra hvert kall til get().

Strukturert samtidighet automatiserer denne koordineringen.

Preview-status

Strukturert samtidighet leveres som et preview-API i pakken java.util.concurrent. For å bruke det må du kompilere og kjøre med --enable-preview.

Den sentrale klassen er StructuredTaskScope, som gjennomgås i neste leksjon.

Levetidsgarantier

Innenfor et strukturert scope:

  • Alle deloppgaver fullføres, mislykkes eller kanselleres før scopet avsluttes
  • Ingen deloppgave fortsetter i bakgrunnen
  • Kallstakken gjenspeiler det faktiske oppgavehierarkiet i tråddumper

Fordel for observerbarhet

Fordi deloppgavetreet er eksplisitt, kan JDK-verktøy vise det. En tråddump grupperer deloppgaver under det overordnede scopet, noe som gjør diagnostisering langt enklere enn med spredte tråder fra en trådpulje.

Fungerer godt sammen med virtuelle tråder

Hver deloppgave i et strukturert scope kjører som standard i sin egen virtuelle tråd. Det er de virtuelle trådenes lave kostnad som gjør det praktisk å fordele arbeidet på mange deloppgaver.

De to funksjonene er utviklet for å fungere godt sammen.

Mental modell

Tenk på et strukturert scope som en try-with-resources-blokk for samtidighet: Du åpner scopet, oppretter deloppgaver, venter på dem og lukker deretter scopet. Den avsluttende krøllparentesen er garantien for at ingenting fortsatt kjører.

Rask sjekk

Test forståelsen Deres av kjerneprinsippet.

Oppsummering

De har blitt kjent med modellen for strukturert samtidighet:

  • Relaterte oppgaver danner et tre som er bundet til scopets levetid
  • Samtidig kode leses som sekvensiell kode
  • Det er et forhåndsvisnings-API som krever --enable-preview
  • Det fungerer naturlig sammen med virtuelle tråder

Neste: selve StructuredTaskScope-API-et.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Modellen for strukturert samtidighet» gratis?

Ja – hele teksten i «Modellen for strukturert samtidighet» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Modellen for strukturert samtidighet»?

Behandle relaterte oppgaver som én enhet Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Modellen for strukturert samtidighet»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Modellen for strukturert samtidighet
  2. StructuredTaskScope
  3. Avslutning ved feil og suksess
  4. Feilhåndtering og kansellering
← Tilbake til Java Academy