Thread curThread = Thread.currentThread();
Object o = values.get(curThread);
if (o == null && !values.containsKey(curThread))
{
o = initialValue();
values.put(curThread, o);
}
return o;
}
public void set(Object newValue)
{
values.put(Thread.currentThread(), newValue);
}
public Object initialValue()
{
return null;
}
}
当然,这并不是一个工业强度的实现,但 JDK 中的 ThreadLocal 的实现总体思路也
类似于此。
ThreadLocal 的使用
如果希望线程局部变量初始化其它值,那么需要自己实现 ThreadLocal 的子类并重
写该方法,通常使用一个内部匿名类对 ThreadLocal 进行子类化,比如下面的例子 ,
SerialNum 类为每一个类分配一个序号
public class SerialNum
{
// The next serial number to be assigned
private static int nextSerialNum = 0;
private static ThreadLocal serialNum = new ThreadLocal()
{
protected synchronized Object initialValue()
{
return new Integer(nextSerialNum++);
}
};
public static int get()
{
return ((Integer) (serialNum.get())).intValue();
}
}