ThreadLocal -不是线程它是一个容器,用于保存数据的对象

这个容器的特色是是保存一两个值,一个值是当前的线程,另外一个用户指定的值: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);
}
相关文章
相关标签/搜索