Concurrency Avanzato

Condividi dati attraverso gli stack di chiamate in modo sicuro senza le insidie di ThreadLocal.

✕ 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.
🔒

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
Valori scoped
Disponibile

Finalizzato nel JDK 25 LTS (JEP 506, settembre 2025).

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.

Condividi 𝕏 🦋 in