public class A  
    {
       public int b = 0;
       static public Object o = new Object();
       public void fun(Object o)
       {
          lock (this)//把lock放在这里就锁定了,输出是开始 ,结束,开始,结束,开始,结束...
            {
           Console.WriteLine("线程开始,当前数值为{0}", ((A)o).b);
            lock (this)//把lock放在这里失效,输出是开始,开始,开始,....结束,结束,结束...为什么?
            {
               ((A)o).b++;
               Thread.Sleep(1000);
            } 
           Console.WriteLine("线程结束,当前数值为{0}", ((A)o).b);
          }
           
       }
    }
//主函数
              A a = new A();
            Thread[] threads = new Thread[10];
            for (int i = 0; i < 10; i++)
            {
                threads[i] = new Thread(a.fun);
                threads[i].Start(a);
            }