【源码】ThreadLocal与Thread的关系

EDA课程实验:《数字逻辑电路》实验四___基于Minisys 平台 VIVADO工具与Verilog语言 (4)使用 Verilog HDL 实现一个分频器 clock_div,输入的是系统提供的 100MHz 频率,输出的是 1Hz 频率,占空比是 1:2,(实际上可以用一个加 1 计数器来实现降频,输入的是一个 100MHz 频率的方波,对这 个方波计数 1 亿次刚好到 1 秒(1Hz),题目要求输出频率占空比是 1:2,也就是这个 1Hz 的 方波高电平和低电平各 500ms,可以采用计数到中间值的时候输出电平翻转。(1)1) 拨动 SW1~0 为 01,按下 P4 按钮,GLD1~0 为 01; 阅读详情

这是两个很基础的类了,大多数情况下都会用到。今天在群里有人说到这个问题,我顺便就看了下源码。

这里就简单说下这两个类的关系吧。

我们知道,在多线程环境下每个 Thread 的 ThreadLocal 是隔离的,每个 Thread 都拥有自己的 ThradLocal 副本。

换个说法就是通过同一个 ThreadLocal 在多线程的环境下可以存放和获取不同的值。

从 ThreadLocal 的 get 方法入手,看看数据是从哪里取的

public class ThreadLocal<T> {
	...
    /**
     * 这里的 getMap 方法获取存有数据的map,并且key为当前线程
     */
    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();
    }
    
    /**
     * 存放数据的map对应 threadLocals 属性
     */
    ThreadLocalMap getMap(Thread t) {
        return t.threadLocals;
    }
    ...
}
public
class Thread implements Runnable {
	...
	/* ThreadLocal values pertaining to this thread. This map is maintained
     * by the ThreadLocal class.
     * 这里看到上面 ThreadLocal 存放数据的map来自 Thread 的 threadLocals,并且该map由 ThreadLocal 维护
    */
    ThreadLocal.ThreadLocalMap threadLocals = null;
	...
}

这里我们可以梳理下这两者的关系:
1、Thread 拥有属于自己的一个map,key为 ThreadLocal,value为值
2、ThreadLocal 获取值时实际上是从当前 Thread 的map中获取(以自己为key)

这也就是为什么 ThreadLocal 能在每个 Thread 中保持一个副本,实际上数据是放在 Thread 中的。

深入解读WT软件湍流强度计算与分析 阅读详情

相关推荐

从GEFCom到UCI:手把手教你构建电力负荷时空预测模型(Python版)

本文详细介绍了如何从GEFCom到UCI数据集构建电力负荷时空预测模型(Python版),涵盖数据集解析、时空特征工程、模型架构设计及工业部署优化。通过多任务图神经网络(MTGNN)实现高精度预测,并结合边缘计算和在线学习机制提升实际应用效果,为能源管理系统提供可靠解决方案。

lambda的博客 812

ThreadLocal 6:Thread,ThreadLocal,ThreadLocalMap的关系;

说明: (1)本篇博客,主要分析Thread,ThreadLocal,ThreadLocalMap的关系;同时,结合三者的关系,继续深化分析get(),set(),remove()方法; 目录 一:Thread,ThreadLocal,ThreadLocalMap:三者的关系; 二:结合【Thread,ThreadLocal,ThreadLocalMap:三者的关系】进一步分析get(),set(),remove(); 1.进一步分析:get()方法; 2.进一步分析:set()方法; ..

小枯林的博客 2180

STM32实战——七段数码管动态扫描技术详解

本文详细解析了STM32控制七段数码管的动态扫描技术,包括硬件连接、CubeMX配置及编程实现。通过分时复用原理和优化代码逻辑,实现稳定显示效果,并解决亮度不均、闪烁等常见问题。适合嵌入式开发者快速掌握STM32数码管驱动技术。

weixin_42561143的博客 279

Thread、ThreadLocal、ThreadLocalMap是什么?看这一篇

一提到ThreadLocal,很多人都会心惊胆战,因为ThreadLoca确实算是JAVA并发编程中一大难点,尤其是ThreadLocal、ThreadLocalMap、Thread三者之间的关系更是错综复杂。本文结合JAVA源码,皆以最简单的方式介绍这三者概念以及它们之间的关系,希望能帮读者打通这其中的任督二脉。 之前一直有个观念,学习一个新的知识之前,必先了解其为什么诞生以及其解决的是什么问题。之前我们学习多线程的时候就知道,多线程对共享变量进行访问,可以会出现安全问题。 ThreadLocal(线程变

qq_52173163的博客 5149

GNSS - PPP软件 - GAMP 在VS2019/2022下完成调试、跑通程序(超详细!)

WIN32;_DEBUG;_CONSOLE;O_WARNINGS;ENAGLO;ENACMP;ENAGAL;ENAQZS;NFREQ=3。

qq_43381998的博客 8247

Apache Hop环境搭建实战:从零到一的下载、安装与配置指南

本文详细介绍了Apache Hop环境搭建的全过程,包括下载、安装与配置指南。从选择正确的JDK17版本到设置关键环境变量,再到启动GUI界面和解决常见问题,提供了全面的实战指导。适合数据工程师和ETL开发者快速上手这一强大的数据集成工具。

weixin_42634811的博客 572

关于ThreadLocal,ThreadLocalMap,Thread的关系

ThreadLocal、ThreadLocalMap、Thread什么是ThreadLocal?ThreadLocal原理get方法set方法ThreadLocal、Thread、ThreadLocalMap三者的关系Hash冲突问题内存泄漏问题为什么会发送内存泄漏 ?如何解决内存泄漏问题? 什么是ThreadLocal? 官方解释:ThreadLocal是一个本地线程副本变量工具类,主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰。 白话:ThreadLocal就是给每个线程

Squid87的博客 1220

Habitat安装全网最详细教程,手把手带你跑通example.py(全网唯一)

全网最详细具身智能仿真平台habitat的安装教程

shannanshouyin的博客 2755

用通俗易懂的大白话讲明白ThreadLocal

本文深入浅出地讲解了Java中ThreadLocal的实现原理和内存泄漏问题。作者以大白话解释:每个Thread类内部都有ThreadLocalMap,ThreadLocal的set/get操作实际是在操作当前线程的这个Map,ThreadLocal对象仅作为key使用。文章详细分析了源码实现,并指出通过弱引用设计,ThreadLocal已尽量避免内存泄漏。最后强调最佳实践:将ThreadLocal声明为static,并在使用后主动remove。文章还提到ThreadLocal在父子线程传值场景的局限性

曹举的个人博客 2723

【OpenClaw企业级智能体实战】第11篇:制造业设备预测性维护实战——OpenClaw+DeepSeek+Prometheus从零搭建(附完整代码)

本文聚焦制造业设备预测性维护的核心痛点,基于OpenClaw v2026.2.1、DeepSeek智能诊断、Prometheus监控等工具,拆解“设备状态监控→智能故障诊断→预测性维护”三大核心场景。从技术原理、算法构建、实操流程到完整代码实现,提供“数据采集→模型训练→智能调度→自动处置”的全链路方案。方案遵循工业安全规范,采用“只读优先、权限最小化”原则,适配中小制造企业落地需求。通过虚拟案例验证,可使设备非计划停机时间下降65%、平均修复时间缩短47%,既适合新手快速入门,也为进阶读者提供架构优化思路

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 606

深入解析 Fiori Launchpad Notification:架构、配置与用户体验全景

开发者可继承接口,在注册自研 Provider,利用实例化消息;若想批量推送,可用API (

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 435

【数据库连接,线程,ThreadLocal三者之间的关系】

不是的,==这时ThreadLocal就派上用场了,在第一次数据持久化操作做完之后,将这个数据库连接暂存在ThreadLocal中,在之后的数据库切换中需要用到时再拿出来用。如果池中没有空闲连接,线程将等待另一个线程将连接对象返回到池中。ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。举个例子,一个线程的生命周期要做这么几件事情:参数校验,业务逻辑1,数据持久化,业务逻辑2,数据库切换,业务逻辑3。

tigerhhzz的博客 1338

基于Simulink进行光伏逆变器效率分析的仿真建模

特点能量转换:将光伏电池板产生的直流电转换为交流电。效率评估:分析逆变器在不同负载条件和环境条件下的效率。动态特性:考虑温度、光照强度等外部因素对逆变器效率的影响。挑战精确建模:准确地模拟光伏电池板、逆变器及其交互的动力学过程。多因素考量:需要同时考虑输入电压、电流、温度、光照强度等多种因素对逆变器效率的影响。集成度:需要与其他系统(如最大功率点跟踪MPPT算法、电网连接等)无缝集成,以实现全面的系统分析。首先明确要模拟的任务内容。输入条件(如光照强度、温度等)。

amy_mhd的博客 142

ThreadLocal源码解析,以及ThreadLocal、ThreadLocalMap、Thread 三者之间的关系

ThreadLocal、ThreadLocalMap、Thread 三者之间的关系 ThreadLocalMap 是 ThreadLocal 的内部类,Thread 中有个 ThreadLocalMap 成员变量 threadLocals  ThreadLocal源码解析 下面看一下,jdk 关于 ThreadLocal api ThreadLocal类 g

三易专栏 4103

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

thread、threadlocal、threadLocalMap的关系、源码解读以及使用心得

目录三者的代码分析关系分析ThreadLocal用途ThreadLocal注意事项为什么要用弱引用 三者的代码分析 /** * 定义一个ThreadLocal单例类,来为当前运行的线程绑定一个固定的数据库连接对象(Connection) * 其实这不是严格意义上的单例,单线程内是单例的,但是多线程下就不是了。 */ public class ThreadLocalOfConn { private static ThreadLocal<Connection> tl = new Thread

路辉的博客 1381

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ThreadLocal 与 Thread 之间关联 源码角度图解

qq_34606853的博客 353

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Thread,ThreadLocal,ThreadLocalMap

这三者的关系随着JDK的迭代发生了很大改变——map的持有者发生了改变,变成了Thread类,entry中存储的键从线程变成了ThreadLocal。当然谈到这个,Entry为什么使用虚引用指向ThreadLocal也值得谈一谈,但是,这篇文章就谈这么多吧。下次再见!

qq_63132580的博客 1185

Java多线程与高并发专题——在 Thread 中多个 ThreadLocal 是怎么存储的?

Java多线程与高并发专题——在 Thread 中多个 ThreadLocal 是怎么存储的?

从知识输入到知识输出 1690

面试官:说说ThreadLocal ,ThreadLocalMap 和Thread 的关系?我懵逼了

引言 这三种的关系由于大量的内部类的关系,第一次看的时候还是有点绕的,感觉你是老子的孙子,又是老子的老子。我还是建议你先抛开内部类的关系,把每一个类当作普通类来看到,理解每個类的职责,最后再把内部类放进去考虑这样设计的目的。这里也给大家一个启示,面对复杂的事情的时候,我们需要跳出来,先把问题简单化,大方向把握了,再进一步去细化每一个功能点和设计的艺术。 关系图解 接下来我们看下面一张图 从上图我...

qq_37595013的博客 1437

Thread、ThreadLocal、ThreadLocalMap

Thread、ThreadLocal、ThreadLocalMap

qq_44300280的博客 2913

ThreadLocal原理解析与源码深度阅读

本文将讲解 1.ThreadLocal内部结构,与ThreadLocalMap、Thread之间的关系 2.ThreadLocalMap的Entry为什么key为弱引用,value为强引用 3.ThreadLocal采取了哪些措施避免内存泄漏 4.详细的带注释的源码阅读 如果key为强引用,则Entry对象永远对ThreadLocal对象有一个强引用,ThreadLocal对象将不会被清理,即使项目中已经无变量引用这个ThreadLocal对象。

qq_54616363的博客 881

ThreadLocal源码理解

前言 在之前的工作和学习中比较少涉及到ThreadLocal的使用,直到学习Handle消息机制时,在Looper类中使用了ThreadLocal,于整个Handle机制而言ThreadLocal的意义还是很重要的,在后来的某条面试中也被问到过,也证明ThreadLocal是有必要学习一下的。 private static void prepare(boolean quitAllowed) { ...... sThreadLocal.set(new Looper(quitA

qq_27246079的博客 231

ThreadLocal源码解读

ThreadLocal的作用 用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。   ThreadLocal的主要方法 主要方法有 get(),set(),remove() 分别对应获取值,设置值,删除值 对于同一个线程,在没有set或remove之后,get会得到null值   Thread,T...

YotWei 360

简明扼要,再谈ThreadLocal和synchronized

昨天上Java版块逛了一圈,一个2万5千人浏览的帖子引起了偶滴注意 ThreadLocal与synchronized ,9页以上的回复,足见大家对这个问题的兴趣。       老实说,从看到这个帖子的题目开始,就觉得帖子的作者估计是在概念上有所混淆了,于是乎想写个咚咚,同大家分享一下自己的心得。       帖子上,讨论的人很多,高手不乏,各抒己见,但不知新手们看明白没有,因此,这里偶

我爱大海V5的专栏 641

ThreadLocal 源码分析

引言 在 jdk/jre/lib/rt.jar 字节码包中,可以看到关于ThreadLocal类及其内部类编译后的文件; 通过本文的对相关类的源码分析,旨在理清Thread、ThreadLocalMap、Entry、ThreadLocal之间的关系 ThreadLocalMap类分析 ThreadLocalMap是ThreadLocal中的内部类,它是实现ThreadLocal类功能的...

Ethan Zeng 博客空间 403

被大厂面试官连环炮轰炸的ThreadLocal (吃透源码的每一个细节和设计原理)

引言 ThreadLocal 是面试过程中非常高频的一个类,这类的复杂程度绝对是可以带出一系列连环炮的面试轰炸。biu biu biu ~~~~. 一直觉得自己对这个类很了解了,但是直到去看源码,接二连三的技术浮出水面(弱引用,避免内存溢出的操作,开放地址法解决hash 冲突,各种内部类的复杂的关系),看到你怀疑人生,直到根据代码一步一步的画图才最终理解(所以本篇文章会有大量的图)。 这里也给大家...

wanghao112956的博客 3119
上一篇: 【Ajax】多次异步请求的顺序以及回调处理问题
下一篇: 【Oracle】根据条件更新多个字段的值
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值