Wir erläutern, wie man eine einzelne Aufgabe in einem virtuellen Thread mit
Executors.newVirtualThreadPerTaskExecutor() (Java 21) startet, worin sich das von klassischen Pools (
newFixedThreadPool,
newCachedThreadPool) unterscheidet, wie man korrekt über
shutdown() und
awaitTermination(...) beendet, Ergebnisse über
Future erhält und wo virtuelle Threads den größten Vorteil bieten (massives I/O, Webserver, Belastungstests). Am Ende – typische Fehler und Feinheiten.