ExpertiDict

Java · Avançado · Inglês · Técnico

ThreadLocal

/θrɛd ˈloʊkəl/substantivo

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.

Veja também

Todos os termos de Java