Red de conocimiento de abogados - Derecho de sociedades - El uso, la función, los escenarios de uso y los principios de ThreadLocal

El uso, la función, los escenarios de uso y los principios de ThreadLocal

Mi entendimiento personal es que una nueva "variable local" se crea directamente dentro del hilo. La razón para agregar comillas es que esta variable local en realidad puede ser una variable global dentro de este hilo.

El método de uso es el siguiente:

La función de ThreadLocal es:

Almacenar una copia de una variable en cada hilo, para que cada hilo pueda acceder a la variable Cuando se usa, se utilizan las variables locales del hilo, garantizando así la seguridad y eficiencia del hilo.

Escenarios de uso de ThreadLocal:

Principio de implementación de ThreadLocal

El uso de ThreadLocal implica principalmente tres métodos: set(T t), get(T t ) , remove(), el siguiente es el código fuente de los tres métodos:

La clase ThreadLocal contiene los tres métodos de operación principales anteriores, que define la clase interna ThreadLocalMap. Como sugiere el nombre, este es similar. La estructura de tabla de HashMap de hecho almacena pares clave-valor (clave, valor) internamente, pero solo hay matrices en su interior, no listas vinculadas. La clave es un objeto ThreadLocal y el valor es el número que queremos operar.

Aunque ThreadLocalMap está definido en la clase ThreadLocal, su mantenimiento en realidad se implementa en la clase Thread. La clase Thread tiene atributos como ThreadLocal.ThreadLocalMap. Cuando se llaman los métodos set y get, se obtendrán. Primero, coloque el objeto ThreadLocal.ThreadLocalMap en el hilo y luego almacene el objeto ThreadLocal como una clave (llame al método usted mismo y luego guárdelo como la clave, interesante :)). una matriz se debe a que se pueden crear múltiples objetos ThreadLocal en cada hilo, por lo que se almacenan en matrices.

De esta manera, cuando cada hilo usa el número de destino, puede llamar al valor del Mapa de cada hilo. Debido a que el Mapa en cada hilo es un Mapa diferente, no tiene nada que ver con la seguridad del hilo. . conversar.

Pérdida de memoria ThreadLocal:

La clave en ThreadLocal.ThreadLocalMap.Entry es una referencia débil, es decir, cuando un objeto ThreadLocal no tiene una referencia fuerte, será reciclado por GC, pero el valor se basa en referencias sólidas, por lo que cuando la clave se recicla, pero hay otras referencias sólidas al valor, se producirán pérdidas de memoria en el último ThreadLocal, es decir, al llamar a set, get, Al eliminar el método, la entrada cuya clave es nula se borrará, pero si no se llaman estos métodos, aún se producirán pérdidas de memoria :), por lo que debe desarrollar el hábito de eliminar el objeto ThreadLocal a tiempo después de usarlo.