Hva er virtuelle tråder
Lette tråder i Java 21
Hva er virtuelle tråder 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.
Velkommen til virtuelle tråder
Virtuelle tråder ble introdusert som en ferdig funksjon i Java 21 (JEP 444). De er lette tråder som administreres av JVM-en i stedet for operativsystemet.
Målet er enkelt: Du skal kunne skrive rett frem-kode med thread-per-request og samtidig skalere til millioner av samtidige oppgaver.
Det gamle problemet
En tradisjonell plattformtråd tilsvarer én OS-tråd. Hver tråd bruker omtrent én megabyte til stakken og er kostbar å opprette.
Det betyr at du bare kan kjøre noen få tusen samtidig. Blokkerende I/O binder opp en hel OS-tråd mens den venter.
Slik skiller virtuelle tråder seg ut
En virtuell tråd eier ikke en OS-tråd. Mange virtuelle tråder multiplekses på et lite utvalg carrier-plattformtråder.
- Billige å opprette (tusenvis per millisekund)
- Svært lite minneforbruk
- Blokkering parkerer ganske enkelt den virtuelle tråden, slik at carrier-tråden frigjøres
Montering og avmontering
Når en virtuell tråd kjører, er den montert på en carrier-tråd. Når den møter en blokkerende operasjon, avmonteres den og frigjør carrier-tråden, slik at annet arbeid kan fortsette.
Denne parkeringen og gjenopptakelsen skjer automatisk. Koden din leses som vanlig blokkerende kode.
En første virtuell tråd
Her er det enkleste eksempelet som er mulig. Thread.ofVirtual().start(...) starter en virtuell tråd, og join() venter på den.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread vt = Thread.ofVirtual().start(() ->
System.out.println("Hello from a virtual thread!"));
vt.join();
System.out.println("Main is done.");
}
}Bekrefte at den er virtuell
Alle Thread-objekter tilbyr isVirtual(). Dermed kan du kontrollere hvilken type tråd koden kjører på.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread vt = Thread.ofVirtual().start(() -> {
System.out.println("isVirtual: " + Thread.currentThread().isVirtual());
});
vt.join();
}
}Skalere til mange oppgaver
Virtuelle tråder er billige, så det er helt normalt å starte titusenvis av dem. Her starter vi 10 000 virtuelle tråder.
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) throws InterruptedException {
AtomicInteger counter = new AtomicInteger();
Thread[] threads = new Thread[10_000];
for (int i = 0; i < threads.length; i++) {
threads[i] = Thread.ofVirtual().start(counter::incrementAndGet);
}
for (Thread t : threads) t.join();
System.out.println("Completed: " + counter.get());
}
}Gi virtuelle tråder navn
Du kan gi en virtuell tråd et navn for å gjøre feilsøking enklere, ved å bruke builderen før du starter den.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread vt = Thread.ofVirtual()
.name("worker-1")
.start(() ->
System.out.println("Running on: " + Thread.currentThread().getName()));
vt.join();
}
}Samme API, ny motor
Virtuelle tråder implementerer nøyaktig det samme Thread-API-et som du allerede kjenner. Du bruker fortsatt start, join, sleep og interrupt.
Det betyr at eksisterende biblioteker som er bygget på Thread og Runnable, fungerer uten endringer.
Når du bør bruke dem
Virtuelle tråder er ideelle for arbeidsbelastninger som er I/O-bundet: webservere, databasekall og forespørsler til eksterne API-er.
De er ikke raskere for CPU-bundne tallberegninger. Der er du fortsatt begrenset av antallet prosessorkjerner.
Ingen pool
Et viktig perspektivskifte er at du ikke skal pool’e virtuelle tråder. Opprett én ny tråd per oppgave, og la den avsluttes når oppgaven er ferdig.
Pooling brukes for å gjenbruke kostbare ressurser. Virtuelle tråder er billige, så pooling av dem er et anti-mønster.
Kort kontroll
Test forståelsen din av virtuelle tråder.
Oppsummering
Du har lært hva virtuelle tråder er, og hvorfor de er viktige:
- Lettvektige, administrert av JVM-en og ferdigstilt i Java 21
- Multiplekset på bærertråder via montering og avmontering
- Ideelle for arbeid med høy samtidighet som er I/O-bundet
- Samme
Thread-API, men opprettet per oppgave i stedet for å pool’es
Deretter skal du lære de ulike måtene å opprette dem på.
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 «Hva er virtuelle tråder» gratis?
Ja – hele teksten i «Hva er virtuelle tråder» 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 «Hva er virtuelle tråder»?
Lette tråder i Java 21 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 «Hva er virtuelle tråder»?
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
- Hva er virtuelle tråder
- Opprette virtuelle tråder
- Plattformtråder kontra virtuelle tråder
- Fallgruver: pinning og ThreadLocals