我在主线程里创建了两个线程,让他们调用了两个不同的方法,然后在方法里用了线程琐:
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个玩...)
请问这是怎么回事?
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个玩...)
请问这是怎么回事?
{
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("玩....");
}
}
} 这样就是一个学习一个玩了
???A线程锁住了1对象,应该在A线程没有释放之前B线程用不了1对象吧