因为ThreadStart使用的是相同的delegate,所以Target==this
所以,所有线程的"this"是同一引用。lock的都是相同的。你的c是null?
而且每条线程的c都是不同的。

static public object LockShare=new object();然后
lock(LockShare)
{
}
那么结果和this一样。

解决方案 »

  1.   

    To:  Lostinet(迷失网络)
    意思就是说如果 lock 一个 非 static 的引用的话,如lock (c),
    等于和没有 lock 一样。lock 也就失去了作用。
      

  2.   

    关键问题是你Lock了一个为null的引用,如果你的程序改为
    Class1 c  = new Class1();
    lock ( c )
    {
        Thread.Sleep( 1000 );
        Console.WriteLine("Current Thread:"+Thread.CurrentThread.Name);
    }
    照样会工作正常。
      

  3.   

    不对,如果是Class1 c  = new Class1();
    lock ( c )
    {
        Thread.Sleep( 1000 );
        Console.WriteLine("Current Thread:"+Thread.CurrentThread.Name);
    }照样线程们一样会一起执行 
        Thread.Sleep( 1000 );
        Console.WriteLine("Current Thread:"+Thread.CurrentThread.Name);因为大家 lock的aa是不一样的。