JAVA学习之路---ThreadLocal

来源:互联网 发布:潍坊淘宝托管 编辑:程序博客网 时间:2024/05/22 14:43

ThreadLocal作用存储当前线程对应的变量,方便使用,不至于像传递参数那样传递下去,多个线程直线对应的变量互补影响。

例子1:比如我们在控制器层通过ThreadLocal的set方法将session中的用户信息存放在ThreadLocal中,那么我们在service层可以通过get方法获取当前线程存在的用户信息,这样就不需要传递request对象。也就是我们需要在多个地方需要使用到变量,我们可以考虑使用ThreadLocal中。

首先我们看看set方法


通过代码我们可以看到,首先会获取当前线程,然后通过当前线程获取线程对应的ThreadLocalMap,如果map不存在,那么重新创建一个ThreadLocalMap,如果存在的话,那么把

ThreadLocal实例对象作为key,设置的值作为value


通过createMap()方法我们也可以看出来,每个线程对应一个自己的ThreadLocalMap,key为ThreadLocal示例对象,value为我们存放的数据

 

如图的get()方法,也是通过当前线程获取当前线程对应的ThreadLocalMap,然后从map中取出通过set()方法设置的值。

总结:由于每个线程都存在独立的ThreadLocalMap,每个都只能访问自己set进去的值,与其他线互不影响。

0 0