ThreadLocal 是一个线程局部变量
static 公所周知静态的
如果研究过struts2的源码就大概可以知道
ActionContext本身就是一个 static ThreadLocal 类型
也正是static 跟 ThreadLocal的搭配导致我们可以在任何地方使用ActionContext,但是同时,不同的Action里的ActionContext又互相独立,有所不同
以下是转的一些简单实例
public class SequenceNumber {
private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){
public Integer initialValue(){
return 0;
}
};
public int getNextNum(){
seqNum.set(seqNum.get() + 1);
return seqNum.get();
}
public static void main(String[] args){
SequenceNumber sn = new SequenceNumber();
TestClient t1 = new TestClient(sn);
TestClient t2 = new TestClient(sn);
TestClient t3 = new TestClient(sn);
t1.start();
t2.start();
t3.start();
t1.print();
t2.print();
t3.print();
}
private static class TestClient extends Thread{
private SequenceNumber sn ;
public TestClient(SequenceNumber sn ){
this.sn = sn;
}
public void run(){
for(int i=0; i< 3; i++){
System.out.println( Thread.currentThread().getName() + " --> " + sn.getNextNum());
}
}
public void print(){
for(int i=0; i< 3; i++){
System.out.println( Thread.currentThread().getName() + " --> " + sn.getNextNum());
}
}
}
}
运行完之后结果
Thread-2 --> 1
Thread-2 --> 2
Thread-2 --> 3
Thread-0 --> 1
Thread-0 --> 2
Thread-0 --> 3
Thread-1 --> 1
Thread-1 --> 2
Thread-1 --> 3
main --> 1
main --> 2
main --> 3
main --> 4
main --> 5
main --> 6
main --> 7
main --> 8
main --> 9