Concorrência estruturada
Gerencie o ciclo de vida de tarefas concorrentes como uma única unidade de trabalho.
Comparação de Código
✕ 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.
Por que a forma moderna ganha
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
Suporte JDK
Concorrência estruturada
Preview
Preview no JDK 25 (quinto preview, JEP 505). Requer --enable-preview.
Como funciona
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.
Documentação Relacionada