Concurrency Avanzado

Gestiona el ciclo de vida de tareas concurrentes como una única unidad de trabajo.

✕ 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());
}
¿Ves un problema con este código? Cuéntanos.
🛡️

Sin fugas de hilos

Todas las tareas bifurcadas terminan antes de que se cierre el ámbito.

Fallo rápido

ShutdownOnFailure cancela las tareas hermanas si una falla.

📐

Estructura clara

El ciclo de vida de la tarea coincide con el ámbito léxico en el código.

Enfoque Antiguo
Ciclo de vida manual de hilos
Enfoque Moderno
StructuredTaskScope
Desde JDK
25
Dificultad
Avanzado
Concurrencia estructurada
Preview

Preview en JDK 25 (quinta preview, JEP 505). Requiere --enable-preview.

La concurrencia estructurada trata un grupo de tareas concurrentes como una sola operación. Si alguna subtarea falla, las demás se cancelan. El ámbito garantiza que no haya fugas de hilos y establece relaciones claras padre-hijo.

Compartir 𝕏 🦋 in