Java基础 等待唤醒机制——消费者代码实现

发布时间 2023-10-28 14:39:45作者: 嘎嘎鸭2

等待唤醒机制的三个角色:生产者、消费者、控制生产者和消费者的第三者

代码:

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;

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();//唤醒跟这把锁绑定的所有线程
}

}
}
}
}