今天发帖数达上限了,这里补充下自己实现的ThreadLocal

先看下ThreadLocal的API
public void set(T value) 将值放入线程局部变量
public T get() 从线程局部变量获取值
public void remove() 从线程局部变量移除值,JVM垃圾回收
protected T initialValue() 返回线程局部变量中的初始值,默认为null

其实仔细想想,ThreadLocal其实就是封装了Map
废话不多说,上代码

public class MyThreadLocal<T>{
//Collections.synchronizedMap同步
    private Map<Thread,T> container=Collections.synchronizedMap(new HashMap<Thread,T>());
//设置值
    public void set(T value){
        container.put(Thread.currentThread(),value);
}
//获取值
 public T get(){
    Thread thread=Thread.currentThread();
    T value=container.get(thread);
    if(value==null && !container.containsKey(thread)){
    value=initialValue();
    container.put(thread,value);
        }
        return value;
    }
//移除
public void remove(){
    container.remove(Thread.currentThread());
}
//默认值
protected T initialValue(){
    return null;
    }
}

手酸了~下次再写了...