wait:表示释放对象上的锁并阻止当前线程,直到它重新获取该锁。
pulse:表示通知等待队列中的线程锁定对象状态的更改。
当线程调用 Wait 时,它会释放对象上的锁并进入对象的等待队列。 对象的就绪队列中的下一个线程 (如果有一个) 获取锁并独占使用该对象。 调用 Wait 的所有线程都保留在等待队列中,直到它们收到来自 Pulse 或 PulseAll 的信号,由锁的所有者发送。 如果 Pulse 发送 ,则只会影响等待队列头部的线程。 如果 PulseAll 发送 ,则等待对象的所有线程都会受到影响。 收到信号后,一个或多个线程离开等待队列并进入就绪队列。 允许就绪队列中的线程重新获取锁。
实例1:Wait(object);
public class MonitorTest
{
private object _lock = new object();
public void FuncA()
{
lock (_lock)
{
Console.WriteLine("进入函数A");
Monitor.Wait(_lock);
Console.WriteLine("退出函数A");
}
}
public void FuncB()
{
Thread.Sleep(300);
lock (_lock)
{
Console.WriteLine("进入函数B");
Thread