ThreadLocal一般用在一個類的成員上,多個線程訪問它時,每一個線程都有本身的副本,互不干擾。java
在Spring中把Connection放到了ThreadLocal中。spa
ThreadLocal類只有三個方法:線程
void set(T value):保存值code
T get():獲取值對象
void remove():移除值blog
1 package com.itcast.thread; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import org.junit.Test; 7 8 /** 9 * ThreadLocal對象的用法 10 * @author hp 11 * 12 */ 13 public class Demo1 { 14 @Test 15 public void fun1() { 16 ThreadLocal<String> t1=new ThreadLocal<String>(); 17 t1.set("hello"); 18 String s=t1.get(); 19 t1.remove(); 20 System.out.println(s); 21 } 22 } 23 //ThreadLocal內部實際上是個Map來保存數據。它內部使用當前線程做爲鍵key。 24 class TL<T> { 25 private Map<Thread,T> map=new HashMap<Thread,T>(); 26 27 public void set(T data) { 28 map.put(Thread.currentThread(), data); 29 } 30 public T get() { 31 return map.get(Thread.currentThread()); 32 } 33 public void remove() { 34 map.remove(Thread.currentThread()); 35 } 36 }