总结篇
- 每个
Thread
中都有一个ThreadLocal.ThreadLocalMap
属性 - 这个
ThreadLocal.ThreadLocalMap
属性中保存的是以ThreadLocal
为key的类似于HashMap的哈希表,以Entry形式作为结点。 - 在线程中执行
ThreadLocal.set(value)
方法时,都会先获取到当前线程中的ThreadLocalMap
,然后以自身(this)为key将数据保存进去。 - 在线程中执行
ThreadLocal.get()
方法时,也是先获取到当前线程中的ThreadLocalMap
,然后以自身(this)为key去取值。
这样,实际上每个线程中都保存一份数据,Looper
就是这样保存在自身当前的线程中的。这也是为什么Looper
中的sThreadLocal
是static
的,却能在不同的线程中获取到自己线程的Looper
的原因。
实际上,真正最重要的角色,是ThreadLocalMap
。
Android Looper-ThreadLocal-Thread 之间的关系
网友评论