ThreadLocal浅谈
一、什么是ThreadLocal?
ThreadLocal
英文直译“线程本地”或“本地线程”,但其实它真实代表一个容器,用于存放线程的局部变量。
它是为了解决多线程并发问题而设计的。
举例说明下:一个web应用中,需要实现一个序列号生成器,可能会有多个并发线程访问它,要保证每个线程得到的序列都是自增的,而不能相互干扰。
先搞个接口:
public interface Sequence{
int getNumber();
}
然后实现一个线程类:
public class Clinet extends Thread{
private Sequence squence;
//构造
public Client(Sequence squence){
this.squence=squence;
}
public void run(){
for(int i=0;i<3;i++){
System.out.println(Thread.currentThread().getName()+"---->"+squence.getNumber());
}
}
}
先不用ThreadLocal,搞个实现类:
public class TestA implements Sequence{
private static int number=0;
public int getNumber(){
number=number+1;
return number;
} public static void main(String[] args){
TestA squenceA=new Clinet();
Client thread1=new Clinet(squenceA);
Client thread2=new Clinet(squenceA);
Client thread3=new Clinet(squenceA);
thread1.start();
thread2.start();
thread3.start();
}
}
自己可以运行下程序
预想的结果是每个线程都是1,2,3
但会出现4,5,6的情况......
如何解决?
未完。。。。
#Java工程师#