本帖最后由 lxcnn 于 2008-10-25 08:04:07 编辑

解决方案 »

  1.   

    你的Static的obj1和Main里的obj1不是同一个对象
      

  2.   

    你可以检查当前对象的GetHashCode()来看是不是同一个对象 同一个对象的GetHashCode()返回值是相同的
            public void Fun()
            {
                lock (this)
                {
                    num = 555;
                    Console.WriteLine("线程一锁住this了{0}", num);
                    Console.WriteLine("当前对象:{0}",this.GetHashCode());
                    Thread.Sleep(6000);
                    Console.WriteLine("线程一锁解开this了");
                }
            }
            public void Fun2()
            {
                lock (this)
                {
                    num = 999;
                    Console.WriteLine("线程二锁住this了{0}", num);
                    Console.WriteLine("当前对象:{0}", this.GetHashCode());
                    Thread.Sleep(6000);
                    Console.WriteLine("线程二锁解开this了");
                }
            }
    方法改成这样就很明显了 局部变量和外部Static变量重名的时候 内部对象就覆盖外部对象的名称了 所以此OBJ1非彼OBJ1