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进去的值,与其他线互不影响。
例子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学习之路,值得学习(2)
- 继续写写我的Java学习之路([我最喜欢的文章之一,转载)
- Java学习之路:不走弯路,就是捷径
- JAVA学习之路:不走弯路,就是捷径
- 我的JAVA学习之路
- JAVA学习之路
- Java学习之路:不走弯路,就是捷径
- Java学习之路:不走弯路,就是捷径
- Java学习之路:不走弯路,就是捷径 www.51testing.com
- Java学习之路:少走弯路,就是捷径
- JAVA学习之路:不走弯路,就是捷径(一)
- JAVA学习之路:不走弯路,就是捷径
- JAVA学习之路:不走弯路,就是捷径
- Java学习之路:不走弯路,就是捷径
- JAVA学习之路:不走弯路,就是捷径
- JAVA学习之路:不走弯路,就是捷径(一)
- JAVA学习之路:不走弯路,就是捷径
- Java学习之路:不走弯路,就是捷径
- Java学习之路:不走弯路,就是捷径
- 我的Java学习之路