等待唤醒机制的三个角色:生产者、消费者、控制生产者和消费者的第三者
代码:
package pojo.xc01;
//用来控制生产者和消费者的执行
public class Desk {
//桌子上是否有面条(0:没有面条 1:有面条)
//用布尔类型表示的话有一个小弊端,因为布尔类型只有两个值,只能控制两条线程轮流执行
public static Integer foodFlog = 0;
//定义一个变量表示总个数,表示吃货最多可以吃多少
public static Integer count = 10;
//锁对象
public static Object lock = new Object();
}
------------------------------------------------------------------------------
package pojo.xc01;标签:Java,面条,lock,代码,static,Desk,唤醒,public From: https://www.cnblogs.com/gagaya2/p/17794062.html
public class Foodie extends Thread{
@Override
public void run() {
while (true) {
synchronized (Desk.lock) {
if (Desk.count == 0)
break;
//先判断桌子上是否有面条
if (Desk.foodFlog == 0) {
try {
Desk.lock.wait();//让当前线程跟锁进行绑定,一旦绑定之后,我们进行notify唤醒的时候 就可以操作了
} catch (Exception e) {
e.printStackTrace();
}
} else { //桌子上有面条,开吃
Desk.foodFlog = 0;
Desk.count--;
Desk.lock.notifyAll();//唤醒跟这把锁绑定的所有线程
}
}
}
}
}