这个容器的特点是是保存一两个值,一个值是当前的线程,另一个用户指定的值:
1:直接保存数据的测试
//1:声明tl对象,在一个项目里,只要有一个ThreadLocal(保存线程局部的变量)对象
ThreadLocal tl = new ThreadLocal();
tl.set("Jack");//保存值
//获取值
Object obj = tl.get();//获取值
System.err.println("obj ="+obj);//Jack
2:用于保存线程局部的变量
(变量三种:1:全局的变量成员变量,2:局部的变量,3:线程局部的变量。)
在一个项目里, 只有一个ThreadLocal对象就可以为所有线程提供服务。如何保证只有一个TL对象:单一的实例。
用工厂模式来创建一个tl对象:
package cn.utils;
import java.util.Random;
/**
* ThreadLocal对象是用于保存数据的,保存数据时,会用当前的线程做引用,用用户的对象做值
*
*/
public class ThreadLocalFactory {
//1:声明一个唯一的静态的tl对象
private static ThreadLocal threadLocal;
//2:建议在static代码块中实例化这个类
static{
threadLocal= new ThreadLocal();
}
//3:从tl对象中取值
public static Object get(){
//4:先从里面取值
Object obj = threadLocal.get();
//5:如果没有,则obj==null:true
if(obj==null){
//如果没有值,创建一个新的放到tl对象里面去
obj = new Random().nextInt(100);
//放到
threadLocal.set(obj);
}
//总是会保证obj有值的
return obj;
}
}
3.remove方法
public coid remove(){
ThreadLocalMap m = getMap(Thread.currentThread());
if(m != null)
m.remove(this);
}