该范式分为两部分,分别针对等待方(消费者)和通知方(生产者)。
等待方遵循如下原则。
- 获取对象的锁。
- 如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。
- 条件满足则执行对应的逻辑。
对应的伪代码如下。
-
synchronized(对象) {
-
while(条件不满足) {
-
对象.wait();
-
}
-
对应的处理逻辑
-
}
通知方遵循如下原则。
- 获得对象的锁。
- 改变条件。
- 通知所有等待在对象上的线程。
对应的伪代码如下。
-
synchronized(对象) {
-
改变条件
-
对象.notifyAll();
-
}