-----------------------------类1----------------------------------------
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();}}
---------------------------------------类2-------------------------------
public class SerialNum{// The next serial number to be assigned
private static int nextSerialNum = 0;public static int get(){   return nextSerialNum;}}
==============================================
两个类在运行时有什么区别?
请写出测试用例.............

解决方案 »

  1.   

    类2中
    return nextSerialNum;
    应该为
    return nextSerialNum++;
    么?
      

  2.   

    ThreadLocal 会为每个线程划定一个私有的变量空间,可以把线程相关的变量放到里面.也就是说,在多线程的环境中,看似访问了同一个对象,却不是.
    下面的测试代码可以看出区别:public class Test implements Runnable{
        private int id=0;
        public Test(int id) {
            this.id=id;
        }
        public void run(){
            for (int i=0;i<10;i++){
                System.out.println("线程"+id+":"+SerialNum.get());
            }
        }
        public static void main(String[] args) {
            Test test = new Test(1);
            (new Thread(test)).start();
            test = new Test(2);
            (new Thread(test)).start();
            test = new Test(3);
            (new Thread(test)).start();
        }
    }