zoukankan      html  css  js  c++  java
  • Java中的ThreadLocal

    本文记录了一些关于ThreadLocal相关的个人理解

    1.Thread,ThreadLocal,ThreadLocalMap三者的关系?

     上面的代码是Thread类的源码,Thread类有一个实例变量,名叫threadLocals,它是ThreadLocalMap类型,同时它又是ThreadLocal的静态类。也就是说,每一个线程都有一个ThreadLocalMap,这个类实现的功能其实就是一个哈希表

    ThreadLocal类中,提供了一系列操作,如get,set,remove等,这些操作全部是在线程的ThreadLocalMap上进行的,换句话说,存储数据的是Thread类中的ThreadLocalMap,操作数据的是ThreadLocal,ThreadLocal本身并不存储数据

     比如get操作,通过getMap来获取当前运行线程的threadLocals(变量的类型为ThreadLocalMap,也就是上面提到的存储数据的哈希表)。

    注意到map.getEntry(this)中传入了this指针,也就是当前ThreadLocal实例的引用,因此除了操作数据之外,ThreadLocal的另一个作用是提供hash地址

    ThreadLocalMap getMap(Thread t) {
            return t.threadLocals;
        }

     

     2.ThreadLocal如何保证不同线程存取的是某个线程自己的本地数据?

    ThreadLocal的地址是不变的,变的是不同线程的ThreadLocalMap,因此在存取的过程中,对于同一个ThreadLocal,不同线程的ThreadLocalMap用相同的Key(同一个ThreadLocal的引用)存取到了不同的值(各自的Value)

    具体细节推荐看这里   https://zhuanlan.zhihu.com/p/61587053

  • 相关阅读:
    Docker(五)-Dcoker容器
    Docker(二)-Docker安装
    Docker(四)-Dcoker镜像
    Docker(三)-Docker中Image、Container与Volume的迁移
    Docker(一)-Docker介绍
    coredump分析
    linux下生成core dump文件方法
    软件测试流程清单
    软件测试风险清单
    [测试管理]测试周报该如何写
  • 原文地址:https://www.cnblogs.com/gagag/p/14501843.html
Copyright © 2011-2022 走看看