配色: 字号:
threadlocal
2013-08-30 | 阅:  转:  |  分享 
  
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();

}

}
献花(0)
+1
(本文系中工402首藏)