当你想要获取一个动态的值时(比如登录时这人的id),而你动态生成的值是在另一个类中的一个局部变量,这样是不是我们就取不到这个生成的值;那我们可以打印一下这个业务下的实现类和服务类(或方法)的相应功能下的当前线程id,如果id都相同的时候,则说明这个业务下的功能是共享同一个线程的:
接下来分别打印几个相关的业务线程
这个是要取的值的类的方法:
假如要取这个类中的这个方法的empId,这个是局部定义的变量
这个是另外一个类要用到上一个的值的方法:
这个是后端controller调用service中的方法:
运行后并使用其功能后会打印它们的的currenThread(当前线程)的id,我们发现它们的id是相同的,这就说明这个功能模块是共享同一个线程的;
ThreadLocal的作用
ThreadLocal就起到仓库的作用,将我们想要用的值(局部变量)存起来,当我们想用(局部变量)的时候就可以从里面取出,想换另一个值的时候,就先删除之前的值,设置新的值
ThreadLocal的详细用法
我们已经知道ThreadLocal的原理后,就来实现它:
我们可以创建一个类作为ThreadLocal的仓库,例如:先创建BaseContext(名字可以随便取)的类,类型需要按照实际参数给哈(这里我用的是Long),里面分别写三个方法即set(要取的值或参数),get(供别的类或方法使用),remove(当我们不想用这个局部变量了,我们就可以通过这个方法删除它);
设置值:
取出值:
当给上面设置的值为22时,取到的值也会是22
恭喜你又学会了一个知识点!!!