我在主线程里创建了两个线程,让他们调用了两个不同的方法,然后在方法里用了线程琐:
public void Study()
{
lock(this)
{
for(int i=0;i<5;i++)
{
Thread.Sleep(100);
Console.WriteLine("学习....");
}
}
} public void Play()
{
                        lock(this)
{
for(int i=0;i<5;i++)
{
Thread.Sleep(100);
Console.WriteLine("玩....");
}
                         }
}
我认为应该是琐机制应该不影响结果(1个学习1个玩1个学习1个玩...),因为调用的方法代码不同,但是结果竟然可以5个学习才是5个玩。
但是如果我只锁其中一个方法,结果就不受影响(1个学习1个玩1个学习1个玩...)
请问这是怎么回事?

解决方案 »

  1.   

    當一個對象,使用了lock之後,同一時間衹能有一個線程能夠進入。你雖然是兩個不同的方法,但是lock了一個相同的對象。
      

  2.   

    public void Study() 

    lock(this) 
    { for(int i=0;i <5;i++) 

    Thread.Sleep(100); 
    Console.WriteLine("学习...."); 
    Monitor.Pulse(this);


    } public void Play() 

                            lock(this) 

    Monitor.Wait(this);
    for(int i=0;i <5;i++) 

    Thread.Sleep(100); 
    Console.WriteLine("玩...."); 

                             } 
    } 这样就是一个学习一个玩了
      

  3.   


    ???A线程锁住了1对象,应该在A线程没有释放之前B线程用不了1对象吧