Concorrenza strutturata
Gestisci i cicli di vita dei task concorrenti come un'unica unità di lavoro.
Confronto Codice
✕ 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.
Perché vince l'approccio moderno
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
Supporto JDK
Concorrenza strutturata
Anteprima
Anteprima nel JDK 25 (quinta anteprima, JEP 505). Richiede --enable-preview.
Come funziona
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.
Documentazione Correlata