ThreadLocal
1 为什么存在
“但见那孙猴子揪下一撮猴毛,片刻化作多个分身”“小的们,给我上”—避免共享,保证线程安全。
2 是什么
Thread是公交线路;
ThreadLocal是一个窗口(公交站点),可将线程的数据资源绑定到当前线程或者获取。—每个线程都有个threadLocals实例变量,thread1 存放格式【沙河西站:戴帽子的会唱歌的小男孩】
thread2 存放格式【沙河西站:戴帽子的会唱歌的小女孩】
/* ThreadLocal values pertaining to this thread. This map is maintained by the ThreadLocal class. */
ThreadLocal.ThreadLocalMap threadLocals = null;
当使用ThreadLocal存值时,首先是获取到当前线程对象,然后获取到当前线程本地变量Map,最后将当前使用的ThreadLocal和传入的值放到Map中,也就是说ThreadLocalMap中存的值是[ThreadLocal对象, 存放的值],这样做的好处是,每个线程都对应一个本地变量的Map,所以一个线程可以存在多个线程本地变量。
3 哪里用
横向上一个thread一个数据资源;
纵向上随着thread随波逐流;
空间换时间,避免共享;
某些资源初始化代价太大;每次使用都要初始化;
危险:应用代码直接使用可能触礁危险,如资源没有适当的清理;
4 用来管理多数据源切换
外界条件出发:通过车站set;运行中通过车站get;实现数据源的切换;