Concurrency Продвинутый

Управление жизненным циклом параллельных задач как единой единицей работы.

✕ 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());
}
Заметили проблему в этом коде? Сообщите нам.
🛡️

Нет утечек потоков

Все разветвлённые задачи завершаются до закрытия Scope.

Быстрый сбой

ShutdownOnFailure отменяет дочерние задачи при сбое одной из них.

📐

Чёткая структура

Жизненный цикл задач соответствует лексическому Scope в коде.

Старый подход
Ручное управление жизненным циклом потоков
Современный подход
StructuredTaskScope
Начиная с JDK
25
Сложность
Продвинутый
Структурированный параллелизм
Предварительный просмотр

Preview в JDK 25 (пятое preview, JEP 505). Требует --enable-preview.

Структурированный параллелизм рассматривает группу параллельных задач как единую операцию. Если одна подзадача завершается с ошибкой, остальные отменяются. Scope гарантирует, что ни один поток не будет потерян, и создаёт чёткие отношения родитель-потомок.