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工程师#