准确说应该是ThreadLocal类型变量内部注册表(Map )发生了变化但ThreadLocal类型变量本身确是个这才是本质!
下面就做个例子:
、标准例子
定义了MyThreadLocal类创建它个对象tlt分别给 4个线程使用结果 4个线程tlt变量并没有出现共用现象 2是各用各这介绍说明 4个线程使用是tlt副本(克隆品)
/**
* 使用了ThreadLocal类
*
* @author leizhimin 2010-1-5 10:35:27
*/
public MyThreadLocal {
//定义了个ThreadLocal变量用来保存或Integer数据
private ThreadLocal tl = ThreadLocal {
@Override
protected Integer initialValue {
0;
}
};
public Integer getNextNum {
//将tl值获取后加1并更新设置t1值
tl.(tl.get + 1);
tl.get;
}
}
/**
* 测试线程
*
* @author leizhimin 2010-1-5 10:39:18
*/
public TestThread extends Thread {
private MyThreadLocal tlt = MyThreadLocal;
public TestThread(MyThreadLocal tlt) {
this.tlt = tlt;
}
@Override
public void run {
for ( i = 0; i < 3; i) {
.out.prln(Thread.currentThread.getName + "\t" + tlt.getNextNum);
}
}
}
/**
* ThreadLocal测试
*
* @author leizhimin 2010-1-5 10:43:48
*/
public Test {
public void (String args) {
MyThreadLocal tlt = MyThreadLocal;
Thread t1 = TestThread(tlt);
Thread t2 = TestThread(tlt);
Thread t3 = TestThread(tlt);
Thread t4 = TestThread(tlt);
t1.start;
t2.start;
t3.start;
t4.start;
}
}
="xspace-totlerecord">5="xspace-totlepages">1/5="xspace-current">12345>
最新评论