首页 > 其他分享 >ThreadLocal

ThreadLocal

时间:2022-09-21 16:55:50浏览次数:60  
标签:set get ThreadLocalMap ThreadLocal 线程 Entry

ThreadLocal是一个数据结构,有点像HashMap,可以保存key-value键值对,但是一个ThreadLocal只能保存一个,并且各个线程的数据互不干扰。ThreadLocal为变量在每个线程中都创建一个副本。

在线程1中初始化了一个ThreadLocal对象localName,并通过set方法,保存一个占小狼的值,get方法可以拿到之前设的值,但是如果在线程2中,拿到的将是一个null。

   下面是set和get的源码:

     

可以发现每个线程中都有一个ThreadLocalMap数据,当执行set方法时,其值保存在当前线程的threadLocalMap变量中,在第一次调用set方法时,创建ThreadLocalMap。Set方法本质上是调用了ThreadLocalMap的set方法。当执行get方法,是从当前线程的ThreadLocalMap变量获取。所以在线程1中set的值,对线程2来说是摸不到的。

什么是ThreadLocalMap?

ThreadLocalMap类似HashMap,但并没有实现Map接口。ThreadLocalMap中也是初始化一个大小16的Entry数组,Entry对象用来保存每一个key-value对。这里的key永远是ThreadLocal对象。Entry继承于WeakReference,Entry中没有next字段,所以不存在链表的情况了。

 

这样的话,在get的时候,也会根据ThreadLocal对象的hash值,定位到table中的位置,然后判断该位置Entry对象中的key是否和get的key一致,如果不一致,就判断下一个位置

 

标签:set,get,ThreadLocalMap,ThreadLocal,线程,Entry
From: https://www.cnblogs.com/MarkLeeBYR/p/16716222.html

相关文章

  • PageHelper中的ThreadLocal未清空问题
    起因前几天运维发现项目中的XXL执行的时候突然报异常,看了一波异常日志,发现XXl中的普通list查询竟然跑到PageHelper中的我写的分页权限过滤器了。正常来说,我只是简单查询,应......
  • TransmittableThreadLocal和@Async优雅的记录操作日志
    此文主要讲解:如何实现操作记录如何将TransmittableThreadLocal和@Async搭配使用TransmittableThreadLocal阿里的一个开源组件,为了在使用线程池等会池化复用线程的执行......
  • 面试~ThreadLocal
    四种常见的引用强引用---不可回收软引用---内存不足即回收弱引用---发现即回收虚引用---形同虚设,目的是用于对象回收跟踪ThreadLocal1、ThreadLoca是什么ThreadL......
  • Spring 中使用自定义的 ThreadLocal 存储导致的坑
    Spring中有时候我们需要存储一些和Request相关联的变量,例如用户的登陆有关信息等,它的生命周期和Request相同。一个容易想到的实现办法是使用ThreadLocal:pub......
  • 面经-并发-对ThreadLocal(线程隔离)的理解
    ThreadLocal作用:1.线程隔离。线程间:ThreadLocal可实现资源对象的线程隔离,让每个线程各用各的资源对象,避免争用引发的线程安全问题。2.资源共享。线程内:ThreadLocal同时实......
  • ThreadLocal 分析
    1.先说说他的作用哦,提供线程内的局部变量,不同线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。......
  • 聊聊ThreadLocal的使用
    1.什么是ThreadLocalThreadLocal的作用是提供线程内的局部变量,在多线程环境下访问时能保证各个线程内的ThreadLocal变量各自独立。也就是说,每个线程的ThreadLocal变量......
  • ThreadLocal介绍
    介绍ThreadLocal是一个线程变量工具类,提供了线程局部变量,就是为每一个使用该变量的线程都提供一个变量值的副本。我们可以利用ThreadLocal创建只能由同一线程读和写的变量......
  • 浅解ThreadLocal
    ThreadLocal结合这篇博客来看,效果更好,这篇博客中关于WeakReference弱引用进行了说明,以及对于ThreadLocalHashMap的数据结构也进行了分析多线程访问同一个共享变量时特......
  • ThreadLocal
     问题描述,在工作中一次请求请求接口一,将request保存到了ThreadLocal,调用接口二,而接口二也存入了ThreadLocal,接口二完成之后将ThreadLocal  romove了,在此回到......