1. ThreadLocal简介
1>: ThreadLocal相当于一个容器,存储每个线程的数据,且所有的线程都共享一个ThreadLocal变量,所有线程互不干扰;
2>:ThreadLocal和同步线程一样,都是用于解决多线程访问同一个变量造成冲突的问题;
- 同步是通过加锁synchronize达到多线程安全访问;
- ThreadLocal为每个线程提供独立变量的副本,牺牲空间达到多线程安全访问;
下边根据Handler机制进行分析。
2. Handler机制分析
在Handler机制中:
- Handler用于更新UI:用于在子线程中执行完耗时操作后切回到主线程中更新UI;
- MessageQueue:用于存储消息;
- Looper:用于处理消息,以无限循环的方式不断查看MessageQueue中是否有消息
在Handler机制中,之所以每个线程都可以获取到自身的looper,而不影响其他线程,是因为通过操作每个线程自身的localValues内部的table数组实现的,从而达到不同线程访问同一个threadLocal的set()和get()不会访问或者修改其他线程的数据