Automatyczne zamknięcie ExecutorService
Używaj try-with-resources do automatycznego zamknięcia executora.
Porównanie kodu
✕ Java 8
ExecutorService exec =
Executors.newCachedThreadPool();
try {
exec.submit(task);
} finally {
exec.shutdown();
exec.awaitTermination(
1, TimeUnit.MINUTES);
}
✓ Java 19+
try (var exec =
Executors.newCachedThreadPool()) {
exec.submit(task);
}
// auto shutdown + await on close
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Automatyczne sprzątanie
Zamknięcie następuje automatycznie po wyjściu z bloku.
Bez wycieków
Executor zawsze się zamknie, nawet przy wystąpieniu wyjątków.
Znany wzorzec
Ten sam try-with-resources co dla plików, połączeń itp.
Stare podejście
Ręczne zamknięcie
Nowoczesne podejście
try-with-resources
Od JDK
19
Poziom trudności
Początkujący
Wsparcie JDK
Automatyczne zamknięcie ExecutorService
Dostępne
Szeroko dostępne od JDK 19 (wrzesień 2022)
Jak to działa
Od Java 19 ExecutorService implementuje AutoCloseable. Metoda close() wywołuje shutdown() i czeka na zakończenie zadań. Koniec z ręcznymi wzorcami try/finally do zamykania.
Powiązana dokumentacja
Dowód