您的位置:首页 > 编程语言 > Java开发

JAVA学习之路---ThreadLocal

2017-01-10 09:05 281 查看
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进去的值,与其他线互不影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA ThreadLoca