publicclassThreadLocalNum{
//这个很重要,ThreadLocal应该属于类,而不是对象,ThreadLocal实例通常是类中的私有静态字段
privatestaticThreadLocalseqNum=newThreadLocal();
publicIntegergetNextSeq(){
if(seqNum.get()==null){
seqNum.set(Integer.valueOf(0));
returnInteger.valueOf(0);
}else{
Integernum=seqNum.get()+1;
seqNum.set(num);
returnnum;
}
}
publicIntegergetValue(){
returnseqNum.get();
}
}
publicclassThreadLocalNumOne{
//使用线程变量ThreadLocalNum
privatefinalThreadLocalNumthreadLocalNum=newThreadLocalNum();
publicvoidaddOne(){
threadLocalNum.getNextSeq();
System.out.println("afterinvokeaddOnemethod,valueis"+threadLocalNum.getValue());
}
publicvoidshowValue(){
System.out.println("ThreadLocalNumOneprintthreadLocalvalueis:"+threadLocalNum.getValue());
}
}
publicclassThreadLocalNumTwo{
//使用线程变量ThreadLocalNum
privatefinalThreadLocalNumthreadLocalNum=newThreadLocalNum();
publicvoidaddTwo(){
for(inti=0;i<2;i++){
threadLocalNum.getNextSeq();
}
System.out.println("afterinvokeaddTwomethod,valueis"+threadLocalNum.getValue());
}
publicvoidshowValue(){
System.out.println("ThreadLocalNumTwoprintthreadLocalvalueis:"+threadLocalNum.getValue());
}
}
publicclassTreadLocalNumCrossObject{
/
测试线程变量是可以穿越类的,他应该是跟线程相关的
@paramargs
/
publicstaticvoidmain(String[]args){
ThreadLocalNumOneone=newThreadLocalNumOne();
ThreadLocalNumTwotwo=newThreadLocalNumTwo();
one.addOne();
two.addTwo();
one.showValue();
two.showValue();
}
} |
|