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工程师#
全部评论

相关推荐

点赞 12 评论
分享
牛客网
牛客企业服务