这个容器的特色是是保存一两个值,一个值是当前的线程,另外一个用户指定的值:java
1:直接保存数据的测试dom
//1:声明tl对象,在一个项目里,只要有一个ThreadLocal(保存线程局部的变量)对象 ThreadLocal<Object> tl = new ThreadLocal<Object>(); tl.set("Jack");//保存值 //获取值 Object obj = tl.get();//获取值 System.err.println("obj ="+obj);//Jack
2:用于保存线程局部的变量测试
(变量三种:1:全局的变量成员变量,2:局部的变量,3:线程局部的变量。)this
在一个项目里, 只有一个ThreadLocal对象就能够为全部线程提供服务。如何保证只有一个TL对象:单一的实例。spa
用工厂模式来建立一个tl对象:线程
package cn.utils; import java.util.Random; /** * ThreadLocal对象是用于保存数据的,保存数据时,会用当前的线程作引用,用用户的对象作值 * */ public class ThreadLocalFactory { //1:声明一个惟一的静态的tl对象 private static ThreadLocal<Object> threadLocal; //2:建议在static代码块中实例化这个类 static{ threadLocal= new ThreadLocal<Object>(); } //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方法code
public coid remove(){ ThreadLocalMap m = getMap(Thread.currentThread()); if(m != null) m.remove(this); }