今天发帖数达上限了,这里补充下自己实现的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;
}
}
手酸了~下次再写了...