Executor wątków wirtualnych
Używaj executora wątków wirtualnych dla nieograniczonej lekkiej współbieżności.
Porównanie kodu
✕ Java 8
ExecutorService exec =
Executors.newFixedThreadPool(10);
try {
futures = tasks.stream()
.map(t -> exec.submit(t))
.toList();
} finally {
exec.shutdown();
}
✓ Java 21+
try (var exec = Executors
.newVirtualThreadPerTaskExecutor()) {
var futures = tasks.stream()
.map(exec::submit)
.toList();
}
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Bez dobierania rozmiaru
Brak rozmiaru puli do dobierania — twórz tyle wątków ile potrzeba.
Lekkie
Wątki wirtualne używają KB pamięci, nie MB.
AutoCloseable
try-with-resources obsługuje zamknięcie automatycznie.
Stare podejście
Stała pula wątków
Nowoczesne podejście
Executor wątków wirtualnych
Od JDK
21
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Executor wątków wirtualnych
Dostępne
Szeroko dostępne od JDK 21 LTS (wrzesień 2023)
Jak to działa
Executor wątków wirtualnych tworzy nowy wątek wirtualny dla każdego zadania. Bez dobierania rozmiaru puli — wątki wirtualne są wystarczająco tanie, by tworzyć ich miliony.
Powiązana dokumentacja
Dowód