InheritableThreadLocal将变量与线程绑定

一文搞懂 ThreadLocal 内部工作原理解析,父子线程数据传递场景应用 TLAB 原理内存实现,ThreadLocal 应用场景。源码层面讲解内存泄露出现原因 阅读详情

引言:将用户信息存进线程并进行绑定。
以前的项目都是把用户信息存进redis,用户标识+token作为key,用的时候进行查询,今天同公司的大佬一同开发一个项目,发现他写的获取用户信息的工具类是把用户信息存进线程的,代码非常简洁。所以记录一下。

工具类

	public class UserUtil {
		//获取当前线程对象
   		public static ThreadLocal<UserInfo> userInfoThreadLocal = new InheritableThreadLocal<>();
    	//获取当前用户信息
    	public UserInfo getUser(){
			return userInfoThreadLocal .get();
		}
   }

调用类

public class Test{
	UserInfo user=new UserInfo//当前登录用户信息
	//将当前用户信息存进线程绑定,后续用到的时候直接get即可。
	UserUtil.userInfoThreadLocal.set(userInfo);

	//其他地方获取用户信息的话 直接调用工具类
	UserUtil.getUser();
}

从代码上就可以看出,短短几行代码就解决了获取当前用户信息的问题。当然只看这几行是不会明白为什么可以这样存储数据跟数据传递的。
可以参考:(https://blog.youkuaiyun.com/hewenbo111/article/details/80487252)进行理解!

InheritableThreadLocal传递父线程的线程本地变量给子线程 1 概念 在Java多线程编程中,通过ThreadLocal实现了线程本地变量机制,通过空间换时间达到了线程隔离的目的。 但是,现在有这样一个需求:父线程中的线程本地变量需要传递给子线程使用。 针对这种情况,通过ThreadLocal是无法完成的,因为ThreadLocal中保存的是线程的本地变量,父线程的线程本地变量只有自己能拿到,子线程无法拿到。如下代码演示: package com.tao.... 阅读详情

相关推荐

ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal

多线程访问同一个共享变量的时候容易出现并发问题,ThreadLocal是除了加锁这种同步方式之外的一种保证规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题。 使用ThreadLocal的最终目的还是为了得到安全的数据,下面分析下ThreadLocal的结构 一、在提到ThreadLocal前我们先看下Thread类以及属性 class T

weixin_37862824的博客 3747

shiro 学习(一)

title: shiro学习(一) date: 2020-11-13 tags:基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看

qq_44128703的博客 847

java中ThreadLocal、InheritableThreadLocal详解

一、ThreadLocal介绍 ​ 在多线程环境下访问同一个线程的时候会出现并发问题,特别是多个线程同时对一个变量进行写入操作时,为了保证线程的安全,通常会进行加锁来保证线程的安全,但是加锁又会造成效率的降低;ThreadLocal是jdk提供的除了加锁之外保证线程安全的方法,其实现原理是在Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThreadLocals用来存储当前操作的ThreadLocal的引用及变量对象,这样就可以把当前线程的变

OceanSky的专栏 5556

线程绑定 ThreadLocal

通过 ThreadLocal,可以在每个线程中存储和获取变量的值,而不需要显式地传递变量的引用。线程绑定允许在同一个线程中访问和修改特定的变量,而不会影响其他线程中的相同变量。通过ThreadLocal,每个线程都能够独立地访问和修改变量的值,而不会影响其他线程中的副本。这种方式在多线程环境中非常有用,特别是当多个线程需要共享某些数据,但又需要保持数据的独立性和线程安全性时。主线程设置了变量的初始值为 42,然后创建了两个新线程,每个线程都从自己的副本中获取变量的值,并进行操作。

m0_73700925的博客 454

多线程间共享变量线程安全问题——ThreadLocal

ThreadLocal 的作用,可以实现在同一个线程数据共享, 从而解决多线程数据安全问题.ThreadLocal 可以给当前线程关联一个数据(普通变量、 对象、 数组)set 方法 [源码!]ThreadLocal 可以像 Map 一样存取数据, key 为当前线程, get 方法每一个 ThreadLocal 对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数 据, 就需要使用多个 ThreadLocal对象实例。

ywl470812087的博客 2465

扩增子分析|溯源分析在R中的复现:跟着Nature系列文章利用FEAST溯源分析包追溯微生物群落的起源

溯源分析由Liat Shenhav等人在2019年发表在Nature Methods杂志,他们开创的一种分析微生物群落组成结构的方法,通过量化不同微生物样本(来源)在目标微生物群落(汇)中的比例或分数识别微生物群落的潜在来源。该方法自发表以来受到微生物学界广泛关注,该论文截止2024年10月9日已经被引289次,是领域内高被引论文,该方法已经成为Nature,cell系列文章高度关注的方法。

weixin_46814750的博客 3433

java笔记--关于线程同步(5种同步方式)

http://www.2cto.com/kf/201408/324061.html 为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 1.同步方法 即

苏摩的专栏 970

RK3568驱动XS9922B:AHD/CVBS双模摄像头兼容性实战

在嵌入式视频开发中,摄像头驱动的稳定性与兼容性往往决定项目交付质量。Linux内核的V4L2框架提供了统一的视频采集抽象,从v4l2_subdev子设备到media controller链路,再到用户态视频节点,每一层都需要精确配置。对于RK3568这类边缘计算平台,其MIPI CSI接口和自研ISP配合RKCIF,构成了完整的多路视频接入通路。当需要接入模拟视频解码芯片时,驱动设计就需同时考虑AHD高清协议与CVBS标清信号的模式切换、格式协商以及寄存器配置。XS9922B作为支持双模输入的解码芯片,可与

weixin_34216614的博客 346

java本地线程绑定,Java多线程-ThreadLocal详解

简介ThreadLocal是JDK包提供的,它提供了线程本地变量,也就是如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题。创建一个ThreadLocal变量后,每个线程都会复制一个变量到自己的本地内存。简单说ThreadLocal就是一种以空间换时间的做法,在每个...

weixin_34902502的博客 557

基于AutoDL复现A-LOAM

Ceres solver 是谷歌开发的一款用于非线性优化的库,在谷歌的开源激光雷达slam项目cartographer中被大量使用。在autodl上面租服务器,地区我租的重庆A区的,GPU我选择的是RTX4090,基础镜像选择的是Miniconda / conda3 / 3.8(ubuntu20.04)/11.6。在AutoDL中我使用的方式是先将该数据集先下载到自己的电脑上,然后再上传到虚拟机中。用MobaXterm解决该问题!搜到的一个解决方式:该问题属于ceres版本问题,将A-LOAM下的。

m0_61281610的博客 1942

SpaceMesh Mining 教程

當參與Spacemesh的用戶在完成P盤工作後需要完成兩個部分工作:PoET+PoST,這兩部分均是在不同的規定時間完成,具體可參考後續的時間表。註意!只有PoET和PoST均完成的用戶才可以獲得收益。Spacemesh相關P盤教程:說明:1.Spacemesh每個紀元epoch周期為14天,在8月7日完成PoET的將在8月20日完成PoST,收益將在8月25日後發放(之後用戶收益將每隔14天發放一次) 後續PoET時間為8月7日+N14 **後續PoST時間為8月20日+N。

Yc Chan 的个人博客 1042

java 绑定变量,转:使用绑定变量的一点总结!

在OLTP系统中提倡使用绑定变量,使用绑定变量可以减少hard parse,避免因解析sql而过渡消耗cpu时间以及引起latch争用等一系列问题。那么到底如何使用绑定变量?可能是困扰很多人的一个问题,下面列举了一些使用绑定变量的例子1.sqlplus中如何使用绑定变量,可以通过variable来定义SQL> select * from tt where id=1;ID NAME------...

weixin_36054032的博客 553

手眼标定(EyeToHand)推导

Base为基坐标系(B),工具末端坐标系(T),标定板为Mark坐标系(M),相机坐标系(C)对于每两个姿态都存在上式,组成一个AX=XB的矩阵方程,X为。此时转换成AX=0的问题,单纯用SVD求奇异解便可得到。相机坐标系到Base基坐标系下的转换关系。已知标定板与机械臂末端的相对位置固定不变,,即。带入(2)式求,至此求解出需要的手眼矩阵。在眼在手外的时候,其实是要求解。

stevenreally6的博客 1142

关于线程绑定变量遇到的问题

关于线程绑定变量遇到的问题

王坤的博客 283

国宇测试盒GH7009 SPI读操作全解析:从接线到代码实现的避坑指南

本文详细解析了国宇GH7009测试盒进行SPI读操作的完整流程与避坑要点。重点阐述了硬件连接中IO2时序控制引脚的关键作用,提供了从接线方案、电源处理到上位机代码实现的实战指南,并针对常见的数据不稳定、特定寄存器读取失败等问题给出了具体解决方案。

dapp9builder的博客 223

博途PLC模糊PID控制(量化因子和比例因子)

参数"量化因子和比例因子",都是为了对清晰值进行比例变换而设置的,其作用是使变量按一定比例进行放大或缩小,以便和我们的模糊论域相匹配完成一一映射。这种变换对整个系统的工作性能也是有影响的。(其实相当于额外引入了比例作用,所以说模糊PID的调节是个系统工程)。限于本人能力,文中难免出现错误和不足,欢迎大家批评和指正。博途PLC的模糊PID控制完整算法可以参看下面这篇文章博途PLC模糊PID控制详解(SCL完整源代码+参数)_RXXW_Dor的博客-优快云博客。......

RXXW_Dor的博客 5268

JAVA多线程-线程间通信(五)-类ThreadLocal的使用

类ThreadLocal的使用     变量值的共享可以使用public static的形式,所有的线程都是用同一个public static变量。如果想实现每一个线程都有自己的共享变量该如何解决呢?     类ThreadLocal主要解决的是:每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每一个线程的私有数据。     1、方法get()与n

绝版灬小伙的博客 473

【ARM CoreLink 系列 5.3 -- CI-700 SLC memory 系统组件详细介绍】

在 CI-700 系统级缓存(SLC)内存系统中,HN-F 节点负责管理缓存一致性和数据传输。每个 HN-F 节点可以发送三种类型的 Snoop 请求,以确保系统中多核处理器和缓存之间的一致性。CI-700 中的系统级缓存(SLC)内存系统通过 HN-F 节点支持 TrustZone® 技术。以下是 CI-700 支持的 SN 类型以及配置方法的简要介绍。ARM CI-700 系统级缓存(SLC)是一个分布式、主要排他性(mostly exclusive) 的最后一级缓存,集成在 HN-F 节点内。

CodingCos的博客 897

深入理解ThreadLocal

深入理解ThreadLocal 提出问题: ThreadLocal 是如何和线程绑定的,ThreadLocal 的存储结构,如何解决hash冲突的 ThreadLocal是否会导致内存泄漏,为啥key要使用WeakReference 在一个父线程开启多个子线程的情况下如何使用ThreadLocal 下面我们一个一个问题来 1. ThreadLocal 的存储结构,如何解决hash冲突的 ThreadLocal 是如何和线程绑定的: 上面的图简单描述他们的调用关系,简单来说就是当我们用ThreadLoc

iuie_sl的博客 503

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

父线程明明把 TraceId 传给了子线程,为什么并发一高,日志链路上下文全串号了?

在线上环境并不建议使用它,我之前用它遇到一个问题,平时低峰期查日志,链路全是对的;但高并发压测,日志里的 TraceId 就会出现大面积的。当用户 B 的业务代码在这个线程里跑起来、打印日志时,输出的自然全都是 A 的信息。想解决手动传值的强侵入性问题,目前国内 Java 圈子里最通用的底层解法,是引入阿里巴巴开源的。的日志里,TraceId 莫名其妙就变成了用户 B 的。的过程,也就不会再次触发 ITL 的拷贝。里,依然是上一个任务留下的用户 A 的 TraceId。的方式,把上下文当成变量传进去。

m0_46995061的博客 194

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ThreadLocal 、 实例变量、静态变量 以及 局部变量的区别

ThreadLocal 、 实例变量、静态变量 以及 局部变量的区别

Erywim的博客 875

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java_174_Thread_高级主题_ThreadLocal局部变量只有自己能看到_InheritableThreadLocal拷贝一份

ThreadLocal 局部变量,只有自己可以看见 package TCPUDPThread; /** * ThreadLocal * 在多线程环境下,每个线程都有自己的数据.一个线程使用自己的局部变量比使用全局变量要好,因为局部变量只有线程自己能看见,不会影响其他线程. * ThreadLocal能够放一个线程级别的变量,其本身能够被多个线程共享使用,别且又能够达到线程安全的目的.说白了,ThreadLocal就是想在多线程环境下去 * 保证成员变量的安全,常用的方法,就是get/set/in

pmcasp的博客 145

避开这3个坑!bizLog在Spring Cloud微服务中的正确配置姿势

本文深入探讨了在Spring Cloud微服务架构中正确配置bizLog日志框架的关键要点。文章重点剖析了三个常见配置陷阱:序列化异常、上下文丢失与线程池优化,并提供了基于Spring AOP和SpEL表达式的实战解决方案与最佳实践,帮助开发者构建健壮、高效的分布式日志系统。

rr23456的博客 432

InheritableThreadLocal-线程变量

由于ThreadLocal设计之初就是为了绑定当前线程,如果希望当前线程的ThreadLocal能够被子线程使用,实现方式就会相当困难(需要用户自己在代码中传递)。在此背景下,InheritableThreadLocal应运而生InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递。

m0_70967938的博客 211

ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal三者之间区别

本文主要介绍ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal三者之间区别、如何使用、什么场景使用以及对原理和源码的介绍。介绍原理的时候通过最直白、最易懂的语言争取让大家了解三者之间的区别,以及日常如何把他们使用起来 ThreadLocal ThreadLocal解决的是每个线程可以拥有自己线程的变量实例。可以从隔离的角度解决变量线程安全的问题。 举个例子: 用户登陆后将用户的信息保存到ThreadLocal中,ThreadLocal .

weixin_43954303的博客 6749

ThreadLocal 类

ThreadLocal 并不是一个Thread,而是 ThreadLocalVariable(线程局部变量)。也许把它命名为 ThreadLocalVar更加合适。线程局部变量就是为每一个使用该变量的线程都提供一个变量值的副本,是 Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。ThreadLocal是除了加锁这种同步方式之外的另一种保证多线程访问出现线程不安全的方式。 从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动

m0_37235955的博客 342
上一篇: 记一次将2021-11-10T13:21:56.000+0800这种日期格式的转为yyyy-MM-dd HH:mm:ss
下一篇: SimpleDateFormat格式化日期(yyyy-MM-dd HH:mm:ss ---> yyyyMMdd)日期错误
Yangsir_java
博客等级 码龄7年 4粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值