ThreadLocal作用和详细用法

当你想要获取一个动态的值时(比如登录时这人的id),而你动态生成的值是在另一个类中的一个局部变量,这样是不是我们就取不到这个生成的值;那我们可以打印一下这个业务下的实现类和服务类(或方法)的相应功能下的当前线程id,如果id都相同的时候,则说明这个业务下的功能是共享同一个线程的:

接下来分别打印几个相关的业务线程

这个是要取的值的类的方法:

假如要取这个类中的这个方法的empId,这个是局部定义的变量

这个是另外一个类要用到上一个的值的方法:

这个是后端controller调用service中的方法:

运行后并使用其功能后会打印它们的的currenThread(当前线程)的id,我们发现它们的id是相同的,这就说明这个功能模块是共享同一个线程的;

ThreadLocal的作用

ThreadLocal就起到仓库的作用,将我们想要用的值(局部变量)存起来,当我们想用(局部变量)的时候就可以从里面取出,想换另一个值的时候,就先删除之前的值,设置新的值

ThreadLocal的详细用法

我们已经知道ThreadLocal的原理后,就来实现它:

我们可以创建一个类作为ThreadLocal的仓库,例如:先创建BaseContext(名字可以随便取)的类,类型需要按照实际参数给哈(这里我用的是Long),里面分别写三个方法即set(要取的值或参数),get(供别的类或方法使用),remove(当我们不想用这个局部变量了,我们就可以通过这个方法删除它);

设置值:

取出值:

当给上面设置的值为22时,取到的值也会是22

恭喜你又学会了一个知识点!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值