今天在阅读代码的时候看到一个ThreadLocal类型的变量。随即到网上查询该类型的详细解释。找到如下文章:

《Java中ThreadLocal的设计与使用》http://www.weste.net/2004/12-2/10310570584.html

看后仍然觉得比较模糊,既然使用ThreadLocal类型的变量是为了解决线程访问冲突问题,并且各个线程独立维护该变量的副本,那么我们为什么不使用一个普通的非静态变量呢? 仔细研究了文中的一个例子后终于找到了答案(JDK中ThreadLocal.class中给的范例就是这个例子)。

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

为什么这里必须使用一个ThreadLocal类型的变量呢?因为我们想要实现我们每创建一个新的线程,新线程的Serial Number就自动加一。这其实就在新线程和旧线程之间建立了一种联系。这种联系就是通过serialNum这个ThreadLocal变量来实现的,+1操作是通过nextSerialNum来实现的。

你明白了吗?


评论

该日志第一篇评论

发表评论

评论也有版权!