background image

 
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();
  }
  }