阅读344 返回首页    go 阿里云 go 技术社区[云栖]


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

最后更新:2017-07-13 09:02:21

  上一篇:go  阿里巴巴集团技术委员会主席王坚:我曾经被诺贝尔奖得主司马贺忽悠,相信人工智能就是未来!
  下一篇:go  CLH 锁