码迷,mamicode.com
首页 > 其他好文 > 详细

ThreadLocal详解

时间:2015-01-18 00:54:35      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

第一次接触ThreadLocal是在Spring管理事务的时候,两个不同事务的方法间调用,需要使用AopContxt获取当前代理类,这样才能使被调用的方法事务生效。因为spring是使用aop控制事务的,而使用了Aop会根据当前是通过接口发布在spring中还是直接类发布发哦spring采用不同的aop方式:cglib和jdk动态代理,所以要使被调用的方法事务生效,就需要从AopContxt中获取当前代理类的引用。去调用同类中的方法,而不是使用this。而spring会将当前代理类引用保存在ThreadLocal中。
好像说远了,今天是要说一下ThreadLocal的。言归正传。

Thread类:通过代码发现当前Thread中有个变量ThreadLocalMap

1 ThreadLocal.ThreadLocalMap threadLocals = null;

ThreadLocal代码如下:

 1 public T get() {
 2   Thread t = Thread.currentThread();
 3   ThreadLocalMap map =  getMap(t);
 4   if (map != null) {
 5     ThreadLocalMap.Entry e = map.getEntry(this);
 6     if (e != null)
 7     return (T)e.value;
 8   }
 9   return setInitialValue();
10 }
1 ThreadLocalMap getMap(Thread t) {
2     return t.threadLocals;
3 }
1 static class Entry extends WeakReference<ThreadLocal> {
2   /** The value associated with this ThreadLocal. */
3   Object value;
4   Entry(ThreadLocal k, Object v) {
5   super(k);
6   value = v;
7   }
8 }

这个变量是个map,这个Map中的Entry的key是ThreadLocal引用,value是Object,所以当前线程可以保存无数多个ThreadLocal变量,key是这个ThreadLocal的对象引用,value是保存的值。所以啊,在当前线程中就可以声明很多ThreadLocal进行存储当前线程需要的数据了。

 

ThreadLocal详解

标签:

原文地址:http://www.cnblogs.com/ruiding/p/4231351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!