`
huangyh
  • 浏览: 61199 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

InheritableThreadLocal 线程变量

阅读更多
ThreadLocal有个缺陷,在子线程里无法访问父线程的变量,
InheritableThreadLocal 解决了这个问题,自动会把父线程的变量传递个子线程,
子线程只能用,修改了不会影响父线程的 东西


public class Test {
	
 private final static InheritableThreadLocal<String> holder = new InheritableThreadLocal<String>();
 public static void main(String[] args){
	 holder.set("aaa");
	 System.out.println("begin=" + holder.get());
	 Thread a = new Thread(){
		public void run() {
			 System.out.println("thread-begin=" + holder.get());
			 holder.set("vvvvvvvvvvvvv");
			 System.out.println("thread-end=" + holder.get());
		}
	 };

	 a.start();
	 try {
		Thread.sleep(2000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	 System.out.println("end=" + holder.get());

分享到:
评论
3 楼 tangjwtj 2010-11-22  
我也复制跑了一下,没有影响到父线程啊
2 楼 victorlin23 2010-09-09  
“这个说法可能不太好。子线程初始化时得到的是父线程数据的引用,可以对父线程的数据进行修改。这个也是使用InheritableThreadLocal需要注意的地方。”
对数据的引用,子线程的修改就会被父线程捕捉到。博主,没测试?我测过了,子线程修改InheritableThreadLocal里面的值,父线程是会被影响的。
1 楼 demh 2010-04-29  
使用InheritableThreadLocal后,子线程只能用,修改了不会影响父线程的 东西 。

这个说法可能不太好。子线程初始化时得到的是父线程数据的引用,可以对父线程的数据进行修改。这个也是使用InheritableThreadLocal需要注意的地方。

相关推荐

Global site tag (gtag.js) - Google Analytics