Concurrency Avanzado

Comparte datos a lo largo de la pila de llamadas de forma segura sin los problemas de 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);
}
¿Ves un problema con este código? Cuéntanos.
🔒

Inmutable

Los métodos invocados pueden leer pero nunca modificar el valor con ámbito.

🧹

Limpieza automática

Sin remove() manual — el valor está limitado al bloque.

Compatible con virtual threads

Funciona eficientemente con millones de virtual threads.

Enfoque Antiguo
ThreadLocal
Enfoque Moderno
ScopedValue
Desde JDK
25
Dificultad
Avanzado
Valores con ámbito
Disponible

Finalizado en JDK 25 LTS (JEP 506, sept. 2025).

ScopedValue proporciona contexto inmutable, heredable y limitado a un ámbito. A diferencia de ThreadLocal, los valores con ámbito se limpian automáticamente, funcionan con virtual threads y no pueden ser modificados por los métodos invocados.

Compartir 𝕏 🦋 in