Streams Średniozaawansowany

Używaj executora wątków wirtualnych dla nieograniczonej lekkiej współbieżności.

✕ 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ć.
♾️

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
Executor wątków wirtualnych
Dostępne

Szeroko dostępne od JDK 21 LTS (wrzesień 2023)

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.