Java · Avançado · Inglês · Técnico
ThreadLocal
Variável cujo valor é separado por thread: cada uma enxerga a sua própria cópia. Usada para carregar contexto, como usuário ou transação, sem passá-lo por parâmetro.
Onde usar
Aparece em frameworks (MDC de log, contexto de segurança). Em pools, vaza dados entre requisições se não houver remove().
Em código
static final ThreadLocal<String> USER =
new ThreadLocal<>();
USER.set("ana");
try {
System.out.println(USER.get());
} finally {
USER.remove(); // evita vazamento
}Exemplos
The user id is stored in a ThreadLocal.
O id do usuário fica guardado num ThreadLocal.
Always call remove, or the pool thread keeps the old value.
Sempre chame remove, ou a thread do pool guarda o valor antigo.
Cuidado
Em pools o valor sobrevive à tarefa; esquecer remove() causa vazamento e dados de outro usuário. Com virtual threads, considere ScopedValue.