Concurrency Avançado

Gerencie o ciclo de vida de tarefas concorrentes como uma única unidade de trabalho.

✕ 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());
}
Viu um problema com este código? Nos avise.
🛡️

Sem vazamento de threads

Todas as tarefas bifurcadas terminam antes do escopo fechar.

Falha rápida

ShutdownOnFailure cancela as demais se uma falhar.

📐

Estrutura clara

O ciclo de vida da tarefa corresponde ao escopo léxico no código.

Abordagem Antiga
Ciclo de vida manual de threads
Abordagem Moderna
StructuredTaskScope
Desde o JDK
25
Dificuldade
Avançado
Concorrência estruturada
Preview

Preview no JDK 25 (quinto preview, JEP 505). Requer --enable-preview.

A concorrência estruturada trata um grupo de tarefas concorrentes como uma única operação. Se qualquer subtarefa falhar, as demais são canceladas. O escopo garante que não haja vazamento de threads e estabelece relações claras entre pai e filho.

Compartilhar 𝕏 🦋 in