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);
}
相關文章
相關標籤/搜索