1、等待方遵循原则如下:
1 等待方获取对象锁
2 检查条件,如果不满足,则调用对象的wait方法,被通知后,仍然需要检查条件。
3 条件满足则执行对应逻辑
伪代码如下:
synchronized (对象) {
while(条件不满足){
对象wait方法
}
执行逻辑
}
说明:
不能使用if判断条件,会导致线程发生虚假唤醒。
通知方遵循原则如下:
1 通知方获取对象锁
2 通知方改变条件
3 通知方调用对象notifyAll,通知所有等待锁上的线程
伪代码如下:
synchronized (对象) {
改变条件
对象notifyAll
}
备注:
1 Java线程通信中wait和notify的神坑,https://blog.csdn.net/X5fnncxzq4/article/details/86445402。