Modellen for strukturert samtidighet
Behandle relaterte oppgaver som én enhet
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.
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
- Modellen for strukturert samtidighet
- StructuredTaskScope
- Avslutning ved feil og suksess
- Feilhåndtering og kansellering