InheritableThreadLocal
ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
private void init(ThreadGroup g, Runnable target, String name,
long stackSize, AccessControlContext acc,
boolean inheritThreadLocals) {
if (inheritThreadLocals && parent.inheritableThreadLocals != null)
this.inheritableThreadLocals =
ThreadLocal.createInheritedMap(parent.inheritableThreadLocals);
}
1. A transferência de variáveis ocorre quando o thread é criado. Se o thread no pool de threads for usado em vez de um novo thread, ele não funcionará. 2. A
atribuição de variáveis é copiada do mapa do thread principal para o sub-threads. valor é o mesmo objeto, se o próprio objeto não for thread-safe, haverá problemas de thread-safe
TransmittableThreadLocal
Como passar ThreadLocal para o thread no pool de threads
O cenário de requisito de ThreadLocal é o cenário de requisito potencial de TransmittableThreadLocal. Se sua empresa precisa "transmitir valores de ThreadLocal ao usar pools de threads e outros componentes de execução que agrupam threads multiplexados" é o cenário de destino de TransmittableThreadLocal.
Abaixo estão alguns exemplos de cenários típicos.
- Sistema de rastreamento distribuído ou teste de pressão de link completo (ou seja, marcação de link)
- Contexto do sistema de registros de coleta de log
- Cache em nível de sessão
- O contêiner do aplicativo ou estrutura de nível superior transfere informações para o SDK de nível inferior nos códigos do aplicativo