packagecn.qy.heima2;importjava.util.Random;public classThreadLocalTest
{private static ThreadLocal xLocal= new ThreadLocal();private static ThreadLocal mythreadScopedata=new ThreadLocal();public static voidmain(String[] args) {//TODO Auto-generated method stub
for(int i=0;i<2;i++)
{new Thread(newRunnable() {
@Overridepublic voidrun() {//TODO Auto-generated method stub
int data=newRandom().nextInt();
System.out.println(Thread.currentThread().getName()+"has put data:"+data);
xLocal.set(data);//xLocal与当前线程相关,进行数据存放
/*MyThreadScopeData mydata= new MyThreadScopeData();
mydata.setName("qianyong"+data);
mydata.setAge(data);
mythreadScopedata.set(mydata);*/MyThreadScopeData.getThreadInstance().setName("qianyong"+data);
MyThreadScopeData.getThreadInstance().setAge(data);newA().get();newB().get();
}
}).start();
}
}static classA
{public voidget()
{int data=xLocal.get(); //xLocal与当前线程相关,进行数据取出
System.out.println("A from"+Thread.currentThread().getName()+",get data:"+data);/*MyThreadScopeData mydata=mythreadScopedata.get();
System.out.println("A from"+Thread.currentThread().getName()+",get myName:"+mydata.getName()+",get myAge:"+mydata.getAge());*/MyThreadScopeData mydata=MyThreadScopeData.getThreadInstance();
System.out.println("A from"+Thread.currentThread().getName()+",get myName:"+mydata.getName()+",get myAge:"+mydata.getAge());
}
}static classB
{public voidget()
{int data=xLocal.get();
System.out.println("B from"+Thread.currentThread().getName()+",get data:"+data);/*MyThreadScopeData mydata=mythreadScopedata.get();
System.out.println("B from"+Thread.currentThread().getName()+",get myName:"+mydata.getName()+",get myAge:"+mydata.getAge());*/MyThreadScopeData mydata=MyThreadScopeData.getThreadInstance();
System.out.println("B from"+Thread.currentThread().getName()+",get myName:"+mydata.getName()+",get myAge:"+mydata.getAge());
}
}
}classMyThreadScopeData
{privateMyThreadScopeData() {};public static /*synchronized*/MyThreadScopeData getThreadInstance()
{
MyThreadScopeData instance=map.get();if(instance==null)
{
instance= newMyThreadScopeData();
map.set(instance);
}returninstance;
}//private static MyThreadScopeData instance=null;//创建单例,饥汉模式//new MyThreadScopeData(); 创建单例,饱汉模式
private static ThreadLocal map=new ThreadLocal();privateString name;private intage;publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
}