概述
ThreadLocal:依附在线程上的变量的媒介。在每一个Thread类中都有一个ThreadLocalMap的实例,源码中是这样体现的
/* ThreadLocal values pertaining to this thread. This map is maintained
* by the ThreadLocal class.
*/
ThreadLocal.ThreadLocalMap threadLocals = null;
ThreadLocalMap是以ThreadLocal对象为键,任意对象为值的Map.通过ThreadLocal类中的 get,set,initialValue方法可以获取,设置,初始化:依靠ThreadLocal类作为媒介依附在线程上的任意对象。
使用场景
一个对象功能的施展需要依赖于一个线程:如唯一标示一个线程,用来调试并发执行的程序哪个线程出现了问题;或者用来追踪多线程环境下每一个线程的执行轨迹。在数据库中,一个事务可能会重复的拿同一个锁,以及维护自身的SavePoint,以便回滚的时候使用到。实际上一个事务就对应着一个线程,通过ThreaLocald把事务的实现类依附在线程上,这样就方便处理锁的缓存,事务回滚,日志记录等问题了。
例子
用ThreadLocal实现CLH锁的时候用到
https://yq.aliyun.com/articles/124841?spm=5176.8091938.0.0.fRxoE5