¿Cómo garantiza ThreadLocal que un hilo solo pueda tener un Looper?
Todos sabemos que se creará un Looper cuando se llame a Looper.prepare, entonces, ¿cómo garantizar que un hilo tenga solo un Looper?
En primer lugar, debes saber que hay una variable sThreadLocal en Looper. ThreadLocal se usa para almacenar información de contexto
y está decorada con estática final, por lo que es la única. cuyo contenido es inmutable
Después de comprender para qué se usa sThreadLocal, echemos un vistazo a preparar
Primero llame al método sThreadLocal.get()
Y ThreadLocalMap es un HashMap, luego juzgue después de obtener un HashMap si es nulo
Si no hay un nodo con la clave sThreadLocal, obtenga valor = nulo y use este valor como el valor de sThreadLocal, es decir, lt; sThreadLocal, nullgt;; Si el mapa es nulo, cree un HashMap y agregue lt; sThreadLocal, nullgt; nodos
De esta manera, el método get obtendrá un Looper o null. se lanzará una excepción. Si es nulo, se llamará a sThreadLocal.set(). p>
De hecho, Looper se usa como valor de sThreadLocal
Volviendo al principio. , ¿cómo garantizar que un hilo tenga solo un Looper?
Debido a que sThreadLocal es el contexto del hilo y es único, y hay
Entonces un hilo tiene solo un Looper.
Si aún no conoce HashMap, este artículo puede resultarle útil. Principio de HashMap
.