Virtual Threads in Java 21 ermöglichen Millionen gleichzeitiger Threads ohne den Overhead von Plattform-Threads.
Virtual Threads¶
// Erstellen eines Virtual Thread Thread.startVirtualThread(() -> { var result = fetchFromDB(); process(result); }); // ExecutorService mit Virtual Threads try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { List> futures = urls.stream() .map(url -> executor.submit(() -> fetch(url))) .toList(); for (var future : futures) { System.out.println(future.get()); } }
Spring Boot-Integration¶
application.properties¶
spring.threads.virtual.enabled=true
Alle Request-Handler laufen auf Virtual Threads!¶
Wann verwenden¶
- I/O-gebundene Operationen (HTTP, DB, Dateien)
- Hohe Anzahl gleichzeitiger Requests
- NICHT für CPU-gebundene Operationen
- NICHT für synchronized-Blöcke (Pinning)
Wichtigste Erkenntnis¶
Virtual Threads = Millionen gleichzeitiger Threads. spring.threads.virtual.enabled=true und fertig. Vorsicht mit synchronized.