Thread线程-->Runnable任务
* 它的内部是一个Map
* 多个线程访问它时,每个线程都有自己的副本,互不干扰!
当多个资源对同一资源进行访问时,可能出现问题.
使用ThreadLocal可以避免这个问题
package com.threadLocal;
import org.junit.Test;
public class Deamo {
@Test
public void fun(){
ThreadLocal<String> t = new ThreadLocal<String>();
t.set("haha");
String s = t.get();
t.remove();
System.out.print(s);
}
}
* 它的内部是一个Map
当前线程作为key,保证了对应得值不能被其他线程访问
class TL<T> {
private Map<Thread, T> map = new HashMap<Thread, T>();
public void set(T data) {
// 使用当前线程做key
map.put(Thread.currentThread(), data);
}
public T get() {
return map.get(Thread.currentThread());
}
public void remove() {
map.remove(Thread.currentThread());
}
}
* ThreadLocal通常用在一个类的成员上
* 多个线程访问它时,每个线程都有自己的副本,互不干扰!
* Spring中把Connection放到了ThreadLocal中。