WEB开发网
开发学院软件开发Java Java线程:深入ThreadLocal 阅读

Java线程:深入ThreadLocal

 2010-01-22 00:00:00 来源:WEB开发网   
核心提示:ThreadLocal与线程成员变量还有区别,ThreadLocal该类提供了线程局部变量,Java线程:深入ThreadLocal,这个局部变量与一般的成员变量不一样,ThreadLocal的变量在被多个线程使用时候,四个线程使用的是tlt的副本(克隆品),/***使用了ThreadLocal的类**@authorl

ThreadLocal与线程成员变量还有区别,ThreadLocal该类提供了线程局部变量。这个局部变量与一般的成员变量不一样,ThreadLocal的变量在被多个线程使用时候,每个线程只能拿到该变量的一个副本,这是Java API中的描述,通过阅读API源码,发现并非副本,副本什么概念?克隆品? 或者是别的样子,太模糊。

准确的说,应该是ThreadLocal类型的变量内部的注册表(Map<Thread,T>)发生了变化,但ThreadLocal类型的变量本身的确是一个,这才是本质!

下面就做个例子:

一、标准例子

定义了MyThreadLocal类,创建它的一个对象tlt,分别给四个线程使用,结果四个线程tlt变量并没有出现共用现象,二是各用各的,这说明,四个线程使用的是tlt的副本(克隆品)。

/** 
* 使用了ThreadLocal的类 
* 
* @author leizhimin 2010-1-5 10:35:27 
*/ 
public class MyThreadLocal { 
        //定义了一个ThreadLocal变量,用来保存int或Integer数据 
        private ThreadLocal<Integer> tl = new ThreadLocal<Integer>() { 
                @Override 
                protected Integer initialValue() { 
                        return 0; 
                } 
        }; 
        public Integer getNextNum() { 
                //将tl的值获取后加1,并更新设置t1的值 
                tl.set(tl.get() + 1); 
                return tl.get(); 
        } 
}

1 2 3 4 5 6  下一页

Tags:Java 线程 深入

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接