public class SerialNum {
     // The next serial number to be assigned
     private static int nextSerialNum =1;
     private static ThreadLocal serialNum = new ThreadLocal() {
         protected synchronized Object initialValue() {
             return new Integer(nextSerialNum++);         }
     };
public static int get() {
         return ((Integer) (serialNum.get())).intValue();     }     public static void main(String[] arg)
     {
       SerialNum testSerialNum = new SerialNum();
       int iWhat=testSerialNum.get() ;
       System.out.println(iWhat) ;     }
}
/* 不明白说些什么?一个 ThreadLocal实例怎么还有 {  }?

解决方案 »

  1.   

    ThreadLocal()可以用来创建先成本地变量(即ThreadLocal对象),在每个线程的基础上储存值,每个ThreadLocal对象保持着对每个对该对象访问线程一份单独的值,外,一个线程处理它自己的值,并且无法访问在同一线程本地变量中的其他值
    给你一个使用ThreadLocal的例子:class ThreadLocalDemo1
    {
       public static void main (String [] args)
       {
          MyThread mt1 = new MyThread ("A");
          MyThread mt2 = new MyThread ("B");
          MyThread mt3 = new MyThread ("C");      mt1.start ();
          mt2.start ();
          mt3.start ();
       }
    }class MyThread extends Thread
    {
       private static ThreadLocal tl =
          new ThreadLocal ()
              {
                 protected synchronized Object initialValue ()
                 {
                    return new Integer (sernum++);
                 }
              };   private static int sernum = 100;   MyThread (String name)
       {
          super (name);
       }   public void run ()
       {
          for (int i = 0; i < 10; i++)
               System.out.println (getName () + " " + tl.get ());
       }
    }
      

  2.   

    以下是我的运行结果
    e:\test>javac ThreadLocalDemo1.javae:\test>java ThreadLocalDemo1
    A 100
    A 100
    A 100
    A 100
    A 100
    A 100
    A 100
    B 101
    C 102
    B 101
    C 102
    B 101
    C 102
    B 101
    C 102
    B 101
    C 102
    B 101
    C 102
    B 101
    B 101
    B 101
    B 101
    C 102
    C 102
    C 102
    C 102
    A 100
    A 100
    A 100e:\test>