Cómo utilizar ThreadLocal, su función, escenarios de aplicación y principios
Mi entendimiento personal es que es una nueva "variable local" creada directamente en el hilo. La razón por la que se agregan las comillas es que esta variable local en realidad puede ser una variable global en el hilo.
Cómo utilizar:
ThreadLocal se utiliza para:
Almacenar una copia de una variable en cada hilo de modo que cuando cada hilo use la variable, Utilice variables locales para ese hilo, garantizando así la seguridad y eficiencia del hilo. Esto garantiza la seguridad y eficiencia del hilo.
Escenarios para usar ThreadLocal:
Principios para implementar ThreadLocal
El uso de ThreadLocal implica tres métodos: set(T t), get(T t), eliminar() y eliminar(). remove(), el siguiente es el código fuente de estos tres métodos:
La clase ThreadLocal contiene los tres métodos principales anteriores, que define la clase interna ThreadLocalMap. Como sugiere el nombre, esta es una estructura de tabla similar. a HashMap internamente Los pares clave-valor almacenados son de hecho (clave, valor), pero solo hay matrices en su interior, no enlaces. Las claves son objetos ThreadLocal y los valores son los números sobre los que queremos operar.
Aunque ThreadLocalMap está definido en la clase ThreadLocal, su mantenimiento en realidad se implementa en la clase Thread, que tiene propiedades como ThreadLocal.ThreadLocal.ThreadLocalMap. ThreadLocal.ThreadLocalMap y luego almacena el objeto ThreadLocal como una clave en él (llama a su propio método y luego se almacena como la clave, divertido :)), es por eso que tenemos que definir ThreadLocal.ThreadLocalMap.Entry como una matriz. La razón por la que las entradas se definen como matrices es que cada subproceso puede crear múltiples objetos ThreadLocal y, por lo tanto, utilizar matrices para el almacenamiento.
De esta manera, cada hilo puede llamar al valor en el Mapa de cada hilo cuando usa el número objetivo, lo cual es irrelevante para la discusión sobre seguridad del hilo, porque el Mapa en cada hilo es un Mapa diferente.
Pérdida de memoria de ThreadLocal:
Las claves en ThreadLocal.ThreadLocalMap.Entry son referencias débiles, es decir, los valores se basan en referencias fuertes, por lo que cuando el La clave se recicla, pero el valor todavía existe en otras referencias sólidas, se producirá una pérdida de memoria. Se han realizado cambios en el último ThreadLocal, es decir, cuando se llaman los métodos set, get y remove, la clave de. La entrada vacía se borrará, pero si no se llaman estos métodos, aún habrá una pérdida de memoria :). Pero si no llamas a estos métodos, seguirás teniendo una pérdida de memoria :), así que acostúmbrate a eliminar tus objetos ThreadLocal cuando termines de usarlos.