Monitor.Wait、Monitor.Pulse、Monitor.PulseAll
1.Monitor.Wait方法
当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有对对象的独占使用。Wait()就是交出锁的使用权,使线程处于阻塞状态,直到再次获得锁的使用权。
2.Monitor.Pulse方法
当前线程调用此方法以便向队列中的下一个线程发出锁的信号。接收到脉冲后,等待线程就被移动到就绪队列中。在调用 Pulse 的线程释放锁后,就绪队列中的下一个线程(不一定是接收到脉冲的线程)将获得该锁。pulse()并不会使当前线程释放锁。
3.Monitor.Pulse方法
所有等待队列中的线程移到就绪队列。
会存在就绪队列、就绪队列、等待队列
使用场景
可应用于池类对象忙碌排队操作;如线程池、链接池、管道池。以下代码截图是abp vnext队rabbitmq得通道池得封装;