1、等待方遵循原则如下:
    1 等待方获取对象锁
    2 检查条件,如果不满足,则调用对象的wait方法,被通知后,仍然需要检查条件。
    3 条件满足则执行对应逻辑
    伪代码如下:

    1. synchronized (对象) {
    2. while(条件不满足){
    3. 对象wait方法
    4. }
    5. 执行逻辑
    6. }

    说明:

    不能使用if判断条件,会导致线程发生虚假唤醒。

    通知方遵循原则如下:
    1 通知方获取对象锁
    2 通知方改变条件
    3 通知方调用对象notifyAll,通知所有等待锁上的线程
    伪代码如下:

    1. synchronized (对象) {
    2. 改变条件
    3. 对象notifyAll
    4. }

    备注:
    1 Java线程通信中wait和notify的神坑,https://blog.csdn.net/X5fnncxzq4/article/details/86445402。