首页 > 其他分享 >ThreadLocal原理

ThreadLocal原理

时间:2023-11-01 16:23:48浏览次数:28  
标签:map set Thread ThreadLocalMap ThreadLocal 原理 null

从ThreadLocal的get和set方法入手

    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }
    public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
    }
    ThreadLocalMap getMap(Thread t) {
        return t.threadLocals;
    }
class Thread implements Runnable {
    /* ThreadLocal values pertaining to this thread. This map is maintained
     * by the ThreadLocal class. */
    ThreadLocal.ThreadLocalMap threadLocals = null;

    /*
     * InheritableThreadLocal values pertaining to this thread. This map is
     * maintained by the InheritableThreadLocal class.
     */
    ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
    void createMap(Thread t, T firstValue) {
        t.threadLocals = new ThreadLocalMap(this, firstValue);
    }

可以看到在set方法中首先会使用getMap方法得到一个ThreadLocalMap,如果map为空就进行初始化调用createMap方法,不为空就网map里面添加数据。所以ThreadLocal里面是靠ThreadLocalMap储存数据的。
get方法也是用ThreadLocalMap里面的方法。

标签:map,set,Thread,ThreadLocalMap,ThreadLocal,原理,null
From: https://www.cnblogs.com/xiaoovo/p/17803414.html

相关文章

  • Mabatis⼯作原理
    Mybatis框架在操作数据库时,大体经过了8个步骤1.读取mybatis配置文件mybatis-config.xml。mybatis-config.xml作为mybatis的全局配置文件,配置了mybatis的运行环境等信息,其中主要内容是获取数据库连接。2.加载映射文件mapper.xml,mapper.xml文件即sql的映射文件,该文件中配置了操作数......
  • armsom: AIM5已经设计完了原理图,正在进行电路布局
    在现代电子工程领域,原理图设计和电路布局是新产品开发的关键步骤之一。它们为电子设备的功能和性能奠定了基础,决定了产品的最终质量和可靠性。ArmSoM已经成功完成了AIM5的原理图设计,目前正在积极进行电路布局的工作,如下为AIM5初步布局示意图,预计11月二十号完成电路布局。 armso......
  • 固态硬盘存储原理
    机械硬盘存储机械硬盘是利用磁性极粒来存储数据的,所以机械硬盘通常又被称作磁盘存储器发展历史:https://mp.weixin.qq.com/s/lUqLnc0Nl989-jLH8jhDng固态硬盘存储固态硬盘主要由主控、缓存、闪存组成,纯电子结构,固态硬盘存储数据的基本存储单元是"浮栅晶体管",基本结构有:存储电......
  • Kafka基本原理、生产问题总结及性能优化实践 | 京东云技术团队
    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日......
  • armsom: AIM5已经设计完了原理图,正在进行电路布局
    在现代电子工程领域,原理图设计和电路布局是新产品开发的关键步骤之一。它们为电子设备的功能和性能奠定了基础,决定了产品的最终质量和可靠性。ArmSoM已经成功完成了AIM5的原理图设计,目前正在积极进行电路布局的工作,如下为AIM5初步布局示意图,预计11月二十号完成电路布局。armsom-ai......
  • DP查缺补漏之01背包优化原理
    DP查缺补漏之01背包优化原理先复习一下基本知识状态假设DP[I][J]为前\(i\)个物品,容量小于\(j\)时的最优解(最大价值)状态转移DP[I][J]=max(DP[I-1][J],DP[I-1][J-V[I]]+W[I])对于第\(i\)个物品,两种可能装入背包则状态应通过前\(i-1\)个物品,容量小于\(j......
  • Kafka基本原理、生产问题总结及性能优化实践
    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问......
  • trafilatura 网页解析原理分析
    trafilatura介绍Trafilatura是一个Python包和命令行工具,用于收集网络上的文本。其主要应用场景包括网络爬虫下载和网页解析等。今天我们不讨论爬虫和抓取,主要看他的数据解析是如何做的。extract初体验fromtrafilaturaimportfetch_url,extracturl='https://haokan.baid......
  • Applescript成功实现imessage数据筛选,imessage蓝号检测,无痕检测手机号是否注册imess
    一、imessages数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写苹果MacOs......
  • 逻辑漏洞挖掘之CSRF漏洞原理分析及实战演练
    一、前言2月份的1.2亿条用户地址信息泄露再次给各大公司敲响了警钟,数据安全的重要性愈加凸显,这也更加坚定了我们推行安全测试常态化的决心。随着测试组安全测试常态化的推进,有更多的同事对逻辑漏洞产生了兴趣,本系列文章旨在揭秘逻辑漏洞的范围、原理及预防措施,逐步提升大家的安全......