Concurrency Avanzato

Gestisci i cicli di vita dei task concorrenti come un'unica unità di lavoro.

✕ 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());
}
Vedi un problema con questo codice? Faccelo sapere.
🛡️

Nessuna perdita di thread

Tutti i task biforcati completano prima che lo scope si chiuda.

Fallimento rapido

ShutdownOnFailure annulla i fratelli se uno fallisce.

📐

Struttura chiara

Il ciclo di vita del task corrisponde allo scope lessicale nel codice.

Approccio Vecchio
Ciclo di vita del thread manuale
Approccio Moderno
StructuredTaskScope
Dal JDK
25
Difficoltà
Avanzato
Concorrenza strutturata
Anteprima

Anteprima nel JDK 25 (quinta anteprima, JEP 505). Richiede --enable-preview.

La concorrenza strutturata tratta un gruppo di task concorrenti come un'unica operazione. Se un subtask fallisce, gli altri vengono annullati. Lo scope garantisce che non ci siano perdite di thread e fornisce chiare relazioni padre-figlio.

Condividi 𝕏 🦋 in