La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cómo garantiza ThreadLocal que un hilo solo pueda tener un Looper?

¿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().

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 pares clave-valor en el hilo, un sThreadLocal corresponde a un Looper, y si el Looper se modifica nuevamente , arrojará una excepción porque Looper ya existe.

Entonces un hilo tiene solo un Looper.

Si aún no conoce HashMap, este artículo puede resultarle útil. Principio de HashMap

.