Java——ThreadLocal的使用

概述

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

上一篇:[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键


下一篇:求你了,别再说数据库锁的只是索引了!!!