ThreadLocal通常用在一个类的成员上,多个线程访问它时,每个线程都有自己的副本,互不干扰。
在Spring中把Connection放到了ThreadLocal中。
ThreadLocal类只有三个方法:
void set(T value):保存值
T get():获取值
void remove():移除值
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 }