Valori scoped
Condividi dati attraverso gli stack di chiamate in modo sicuro senza le insidie di ThreadLocal.
Confronto Codice
✕ Java 8
static final ThreadLocal<User> CURRENT =
new ThreadLocal<>();
void handle(Request req) {
CURRENT.set(authenticate(req));
try { process(); }
finally { CURRENT.remove(); }
}
✓ Java 25
static final ScopedValue<User> CURRENT =
ScopedValue.newInstance();
void handle(Request req) {
ScopedValue.where(CURRENT,
authenticate(req)
).run(this::process);
}
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Immutabile
I chiamati possono leggere ma non modificare mai il valore scoped.
Pulizia automatica
Nessun remove() manuale — il valore è scoped al blocco.
Sicuro per thread virtuali
Funziona efficientemente con milioni di thread virtuali.
Approccio Vecchio
ThreadLocal
Approccio Moderno
ScopedValue
Dal JDK
25
Difficoltà
Avanzato
Supporto JDK
Valori scoped
Disponibile
Finalizzato nel JDK 25 LTS (JEP 506, settembre 2025).
Come funziona
ScopedValue fornisce contesto immutabile, ereditabile e limitato allo scope. A differenza di ThreadLocal, i valori scoped vengono puliti automaticamente, funzionano con i thread virtuali e non possono essere mutati dai chiamati.
Documentazione Correlata