Ustrukturyzowana współbieżność
Zarządzaj czasami życia współbieżnych zadań jako jedną jednostką pracy.
Porównanie kodu
✕ Java 8
ExecutorService exec =
Executors.newFixedThreadPool(2);
Future<User> u = exec.submit(this::fetchUser);
Future<Order> o = exec.submit(this::fetchOrder);
try {
return combine(u.get(), o.get());
} finally { exec.shutdown(); }
✓ Java 25 (Preview)
try (var scope = new StructuredTaskScope
.ShutdownOnFailure()) {
var u = scope.fork(this::fetchUser);
var o = scope.fork(this::fetchOrder);
scope.join().throwIfFailed();
return combine(u.get(), o.get());
}
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Bez wycieków wątków
Wszystkie rozwidlone zadania kończą się przed zamknięciem zasięgu.
Szybkie wykrywanie błędów
ShutdownOnFailure anuluje rodzeństwo przy awarii jednego zadania.
Przejrzysta struktura
Czas życia zadania odpowiada leksykalnemu zasięgowi w kodzie.
Stare podejście
Ręczny cykl życia wątków
Nowoczesne podejście
StructuredTaskScope
Od JDK
25
Poziom trudności
Zaawansowany
Wsparcie JDK
Ustrukturyzowana współbieżność
Preview
Podgląd w JDK 25 (piąty podgląd, JEP 505). Wymaga --enable-preview
Jak to działa
Ustrukturyzowana współbieżność traktuje grupę współbieżnych zadań jako jedną operację. Jeśli któreś podzadanie zakończy się błędem, pozostałe są anulowane. Zasięg gwarantuje brak wycieków wątków i zapewnia jasne relacje rodzic-dziecko.
Powiązana dokumentacja
Dowód