Valores com escopo
Compartilhe dados entre pilhas de chamadas com segurança, sem as armadilhas do ThreadLocal.
Comparação 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);
}
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Imutável
Os chamados podem ler, mas nunca modificar o valor com escopo.
Limpeza automática
Sem remove() manual — o valor é limitado ao bloco.
Seguro para virtual threads
Funciona eficientemente com milhões de virtual threads.
Abordagem Antiga
ThreadLocal
Abordagem Moderna
ScopedValue
Desde o JDK
25
Dificuldade
Avançado
Suporte JDK
Valores com escopo
Disponível
Finalizado no JDK 25 LTS (JEP 506, setembro de 2025).
Como funciona
ScopedValue fornece contexto imutável, herdável e limitado ao escopo. Diferente de ThreadLocal, valores com escopo são automaticamente limpos, funcionam com virtual threads e não podem ser alterados pelos chamados.
Documentação Relacionada