🕐 等待唤醒机制

生产者 ```java public class Cook extends Thread { @Override public void run() { while (true){ synchronized (Desk.lock){ if (Desk.count == 0){ break; }else { //判断桌子上有没有面条 if (Desk.DataFlag == 1){ //有就等待 try { Desk.lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else { //没有就做面条 System.out.println("厨师做了一碗面条"); //修改状态 Desk.DataFlag = 1; //唤醒消费者 Desk.lock.notifyAll(); } } } } } } ``` 桌子 ```java /* * 控制生产者或消费者的执行 * */ public class Desk { //是否有数据 0没有 1没有 public static int DataFlag = 0; //总共数 public static int count = 10; //锁对象 public static Object lock = new Object(); } ``` 消费者 ```java public class Foodle extends Thread { @Override public void run() { while (true){ synchronized (Desk.lock){ //判断共享数据是否到了末尾 if (Desk.count == 0){ break; }else { //判断桌子上是否有面条 if (Desk.DataFlag == 0){ //如果没有就等待 try { Desk.lock.wait(); //让当前线程和锁进行绑定 } catch (InterruptedException e) { e.printStackTrace(); } Desk.lock.notifyAll();//唤醒这把锁绑定的所有线程 }else { Desk.count--; //如果有就开吃 System.out.println("吃货正在吃面条,还能再吃"+Desk.count+"碗"); //吃完之后唤醒厨师继续做 Desk.lock.notifyAll(); //修改桌子状态 Desk.DataFlag = 0; } } } } } } ```