4.3.3 等待/通知的经典范式
等待/通知的相关方法是任意Java对象都具备的,因为这些方法被定义在所有对象的超类
java.lang.Object上,方法和描述如表4-2所示。
表4-2 等待/通知的相关方法
从4.3.2节中的WaitNotify示例中可以提炼出等待/通知的经典范式,该范式分为两部分,分
别针对等待方(消费者)和通知方(生产者)。
运用等待/通知必须先对对象进行同步
等待方遵循如下原则。
1)获取对象的锁。
2)如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。
3)条件满足则执行对应的逻辑。
对应的伪代码如下。
synchronized(对象) {
while(条件不满足) {
对象.wait();
}
对应的处理逻辑
}
通知方遵循如下原则。
1)获得对象的锁。
2)改变条件。
3)通知所有等待在对象上的线程。
对应的伪代码如下。
synchronized(对象) {
改变条件
对象.notifyAll();
}
参考文献:《java并发编程艺术》