這個容器的特色是是保存一兩個值,一個值是當前的線程,另外一個用戶指定的值: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); }