Virtuelle Threads erstellen
Thread.ofVirtual und Executor
Virtuelle Threads erstellen ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Möglichkeiten zum Erstellen virtueller Threads
Java bietet mehrere Einstiegspunkte zum Erstellen virtueller Threads. Die beiden wichtigsten sind der Builder Thread.ofVirtual() und die Factory Executors.newVirtualThreadPerTaskExecutor().
In dieser Lektion gehen Sie beide durch.
Der Builder: start
Thread.ofVirtual() gibt einen Builder zurück. Der Aufruf von .start(runnable) erstellt den Thread und startet ihn sofort.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t = Thread.ofVirtual().start(() ->
System.out.println("Started directly"));
t.join();
}
}Der Builder: unstarted
Verwenden Sie .unstarted(runnable), wenn Sie den Thread konfigurieren und erst später starten möchten.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t = Thread.ofVirtual().unstarted(() ->
System.out.println("Started later"));
System.out.println("Before start, alive? " + t.isAlive());
t.start();
t.join();
}
}Eine wiederverwendbare Factory
Der Builder kann über .factory() eine ThreadFactory erzeugen. Jeder Aufruf von newThread liefert einen neuen virtuellen Thread.
import java.util.concurrent.ThreadFactory;
public class Main {
public static void main(String[] args) throws InterruptedException {
ThreadFactory factory = Thread.ofVirtual().name("job-", 0).factory();
Thread a = factory.newThread(() ->
System.out.println(Thread.currentThread().getName()));
Thread b = factory.newThread(() ->
System.out.println(Thread.currentThread().getName()));
a.start(); b.start();
a.join(); b.join();
}
}Die Komfortmethode
Thread.startVirtualThread(runnable) ist eine Kurzform, um einen unbenannten virtuellen Thread in einem einzigen Aufruf zu erstellen und zu starten.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t = Thread.startVirtualThread(() ->
System.out.println("One-liner virtual thread"));
t.join();
}
}Der Executor-Ansatz
Für aufgabenorientierten Code empfiehlt sich Executors.newVirtualThreadPerTaskExecutor(). Er erstellt für jede übergebene Aufgabe einen neuen virtuellen Thread.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
exec.submit(() -> System.out.println("task one"));
exec.submit(() -> System.out.println("task two"));
}
System.out.println("All tasks submitted and completed");
}
}Warum try-with-resources
Seit Java 19 implementiert ExecutorService AutoCloseable. Wird er in einem try-with-resources-Block geschlossen, wartet der Block, bis alle übergebenen Aufgaben abgeschlossen sind.
So erhalten Sie ein sauberes, strukturiertes Herunterfahren ohne manuelle Aufrufe von shutdown und awaitTermination.
Viele Aufgaben übergeben
Der aufgabenbezogene Executor verarbeitet mühelos sehr große Mengen an Aufgaben. Jede Aufgabe erhält ihren eigenen virtuellen Thread.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) {
AtomicInteger sum = new AtomicInteger();
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 1; i <= 1000; i++) {
final int n = i;
exec.submit(() -> sum.addAndGet(n));
}
}
System.out.println("Sum 1..1000 = " + sum.get());
}
}Ergebnisse mit Future sammeln
submit gibt ein Future zurück, sodass Sie Rückgabewerte wie bei jedem anderen Executor sammeln können.
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) throws Exception {
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
Future<Integer> f = exec.submit(() -> 6 * 7);
System.out.println("Result: " + f.get());
}
}
}Builder oder Executor
Treffen Sie die Wahl anhand der Absicht:
- Builder / startVirtualThread für einzelne Threads oder eine benutzerdefinierte Benennung
- newVirtualThreadPerTaskExecutor zum Übergeben von Aufgabensammlungen und Sammeln der Ergebnisse
Beide erstellen einen virtuellen Thread pro Arbeitseinheit – genau das, was Sie benötigen.
Einen virtuellen Executor niemals zwischenspeichern
Verwenden Sie nicht denselben Executor für virtuelle Threads wieder, als wäre er ein fester Pool von Arbeitsthreads. Der Executor selbst kann wiederverwendet werden, aber denken Sie daran: Jede Aufgabe erzeugt einen völlig neuen Thread.
Der entscheidende Punkt ist: Es gibt kein Pooling der Threads, sondern lediglich eine komfortable Möglichkeit, Aufgaben zu übergeben.
Kurze Überprüfung
Wählen Sie die beste Möglichkeit, eine große Gruppe von Aufgaben auszuführen, jeweils auf einem eigenen virtuellen Thread.
Zusammenfassung
Sie wissen nun, wie Sie virtuelle Threads erstellen:
Thread.ofVirtual().start(...)und.unstarted(...)Thread.startVirtualThread(...)als Einzeiler.factory()für eine wiederverwendbareThreadFactoryExecutors.newVirtualThreadPerTaskExecutor()mit try-with-resources
Als Nächstes geht es um die Wahl zwischen Plattform- und virtuellen Threads.
Häufig gestellte Fragen
Ist die Lektion „Virtuelle Threads erstellen“ kostenlos?
Ja — der vollständige Text von „Virtuelle Threads erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Virtuelle Threads erstellen“?
Thread.ofVirtual und Executor Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Virtuelle Threads erstellen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was sind virtuelle Threads
- Virtuelle Threads erstellen
- Plattform- vs. virtuelle Threads
- Fallstricke: Pinning und ThreadLocals