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

  • 相关阅读:
    WordPress在nginx服务器伪静态
    excel根据一列的值匹配另一列
    linux上安装Anaconda并创建python虚拟环境
    python模块学习之numpy
    大数据测试工具
    python学习路线
    spark event log
    夏令时
    spark学习指南
    Yarn和Spark对比
  • 原文地址:https://www.cnblogs.com/gagag/p/14501843.html
Copyright © 2011-2022 走看看