ThreadLocal解决的是变量在不同线程间的隔离性,也就是不同线程拥有自己的值,不同线程中的值是可以放入ThreadLocal类中进行保存的。
ThreadLocal,即线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。
可以通过set(T)方法来设置一个值,在当前线程下再通过get()方法获取到原先设置的值。
public class HasSelfPrivateNum {
//ThreadLocal对象用来存放每个线程自己的值
public static ThreadLocal<String> t1=new ThreadLocal<String>();
public void addI(String userName){
}
}
//线程MyThread1 存放自己的值
public class MyThread1 extends Thread{
public void run(){
HasSelfPrivateNum.t1.set("设置一个值");
System.out.print("获取线程的值"+HasSelfPrivateNum.t1.get());
}
}
在第一次调用THreadLocal类的get()方法返回值是null,应该进行初始化,返回默认值。
//如果set方法没有调用的话,
//每个线程会调用一次,进行初始化
public static ThreadLocal<String> t1=new ThreadLocal<String>(){
protected String initialValue(){
return "初始化的值";
}
};