Análise de princípios de TransmittableThreadLocal

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

Supongo que te gusta

Origin blog.csdn.net/wenxueliu/article/details/130919686
Recomendado
Clasificación