一个很奇怪的问题:为什么从threadlocal中取数据的时候是null 问题出在你的单例构造函数里了。private static MyThreadLocalData3 instance=null;你把这个申明为static,就是单例模式,那么 if (instance == null) 在第二个线程里是不可能成立的。但 ThreadLocal里的东西在第二个线程里却是在空的,所以 return threadLocal.get(); 就返回 null了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没看问题回答:在设置和取出的时候都打印下Thread.currentThread就知道是不是同一个线程了 threadLocal.set(instance); 是将值绑定到当前线程中, if (instance == null) 是判断一个在所有线程都是单例的变量。threadLocal.get; 是在当前线程中取值。 if (instance == null) 只能判断这个单例变量是否有值,不能判断当前线程是否有值!!! 各位前辈,不好意思啊,这几天因为有事出差去了,回复晚了。看来是我对threadlocal理解错了,看来threadlocal中的值是与set时的线程绑定的,在其他线程中无法取到值。那么这里我又有一个问题,既然说threadlocal又称之为副本,那么两次从threadlocal中取到的值,应该是不同的啊。还有,threadlocal存在的意义是什么?是否仅仅就是不能再其他线程中取到threadlocal管理的变量? 前面的几个问题你自己去看一下源代码,仔细理解一下就好了。ThreadLocal 存在的一个重要的原因是在IOC或依赖注入等不方便的时候用于传参 junit问题,大家来帮忙 关于Tcp Socket的问题 引入包的疑问 请问各位用random类中的nextInt()方法如如何产生随机数? ______________新手问题,请教j2ee,j2me,j2se根本上的区别是不是在JDK上?谢谢 所谓的外覆类别到底是什么意思 这段代码为什么不起作用,帮我看看,谢谢! 初学JBuider,请问怎样显示一个已经创建好的Dialog? 一个关于局域网的问题 Char类型转int类型时候,怎么才不是赋值ASCII码?? 深夜编代码,自定义异常练习出现错误,急求各路神仙指导 hibernateTemplate 跟 存储过程 执行 先后问题
看来是我对threadlocal理解错了,看来threadlocal中的值是与set时的线程绑定的,在其他线程中无法取到值。
那么这里我又有一个问题,既然说threadlocal又称之为副本,那么两次从threadlocal中取到的值,应该是不同的啊。还有,threadlocal存在的意义是什么?是否仅仅就是不能再其他线程中取到threadlocal管理的变量?
前面的几个问题你自己去看一下源代码,仔细理解一下就好了。ThreadLocal 存在的一个重要的原因是在IOC或依赖注入等不方便的时候用于传参