Valores con ámbito
Comparte datos a lo largo de la pila de llamadas de forma segura sin los problemas de ThreadLocal.
Comparación de Código
✕ 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.
Por qué gana la forma moderna
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
Soporte JDK
Valores con ámbito
Disponible
Finalizado en JDK 25 LTS (JEP 506, sept. 2025).
Cómo funciona
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.
Documentación Relacionada