Vad är virtuella trådar
Lätta trådar i Java 21.
Vad är virtuella trådar är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 1 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.
Välkommen till virtuella trådar
Virtuella trådar blev en färdig funktion i Java 21 (JEP 444). De är lätta trådar som hanteras av JVM i stället för operativsystemet.
Målet är enkelt: låta dig skriva okomplicerad kod med en tråd per begäran och samtidigt skala till miljontals samtidiga uppgifter.
Det gamla problemet
En traditionell plattformstråd motsvarar exakt en tråd i operativsystemet. Varje sådan tråd använder ungefär en megabyte stackminne och är dyr att skapa.
Det innebär att du bara kan köra några tusen samtidigt. Blockerande I/O binder upp en hel OS-tråd medan den väntar.
Så skiljer sig virtuella trådar
En virtuell tråd äger ingen tråd i operativsystemet. Många virtuella trådar multiplexas på en liten pool av carrier-plattformstrådar.
- Billiga att skapa (tusentals per millisekund)
- Mycket litet minnesavtryck
- Blockering parkerar helt enkelt den virtuella tråden och frigör carrier-tråden
Montering och avmontering
När en virtuell tråd körs är den monterad på en carrier-tråd. När den stöter på en blockerande åtgärd avmonteras den och frigör carrier-tråden, så att annat arbete kan fortsätta.
Denna parkering och återupptagning sker automatiskt. Din kod ser ut som vanlig blockerande kod.
En första virtuell tråd
Här är det enklast möjliga exemplet. Thread.ofVirtual().start(...) startar en virtuell tråd, och join() väntar 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.");
}
}Bekräfta att den är virtuell
Varje Thread tillhandahåller isVirtual(). På så sätt kan du kontrollera vilken typ av tråd som koden körs 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();
}
}Skala till många uppgifter
Eftersom virtuella trådar är billiga är det helt normalt att starta tiotusentals. Här startar vi 10 000 av dem.
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());
}
}Namnge virtuella trådar
Du kan namnge en virtuell tråd för enklare felsökning genom att använda buildern innan du startar 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();
}
}Samma API, ny motor
Virtuella trådar implementerar exakt samma Thread-API som du redan känner till. Du använder fortfarande start, join, sleep och interrupt.
Det innebär att befintliga bibliotek som bygger på Thread och Runnable fungerar utan ändringar.
När ska de användas
Virtuella trådar är särskilt effektiva för I/O-bundna arbetsbelastningar: webbservrar, databasanrop och anrop till fjärr-API:er.
De är inte snabbare för CPU-bundna beräkningar. Där begränsas Ni fortfarande av antalet processorkärnor.
Ingen pool
En viktig förändring i tankesättet är att Ni inte poolar virtuella trådar. Skapa en ny tråd per uppgift och låt den avslutas när uppgiften är klar.
Poolning används för att återanvända dyra resurser. Virtuella trådar är billiga, så att poola dem är ett anti-mönster.
Snabbtest
Testa Er förståelse av virtuella trådar.
Sammanfattning
Ni har lärt Er vad virtuella trådar är och varför de är viktiga:
- De är lättviktiga, hanteras av JVM och färdigställdes i Java 21
- De multiplexeras på bärartrådar genom montering och avmontering
- De är idealiska för samtidiga I/O-bundna arbetsbelastningar
- Samma
Thread-API används, men trådarna skapas per uppgift i stället för att poolas
Härnäst får Ni lära Er de olika sätten att skapa dem.
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 ”Vad är virtuella trådar” gratis?
Ja – hela texten till ”Vad är virtuella trådar” 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 ”Vad är virtuella trådar”?
Lätta trådar i Java 21. 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 1 av 4.
Hur lång tid tar lektionen ”Vad är virtuella trådar”?
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
- Vad är virtuella trådar
- Skapa virtuella trådar
- Plattforms- kontra virtuella trådar
- Fallgropar: pinning och ThreadLocals