编写程序,实现生产者消费者案例。
请编写程序,实现包子铺做包子、顾客吃包子的案例。
盘子类:
public class PanZi {
public boolean flag = false;
}
测试类:
public class Test {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)\n");
PanZi panZi = new PanZi();
Object lock = new Object();
new Thread("包子铺"){
@Override
public void run() {
for (int i = 0; i < 2; i++) {
synchronized (lock){
if(panZi.flag){
// 盘子里面有包子
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 制作包子
System.out.println(getName() + " 正在制作包子...");
panZi.flag = true;
// 通知消费者
System.out.println(getName() + " 已经制作好了...");
lock.notify();
}
}
}
}.start();
new Thread("顾客"){
@Override
public void run() {
for (int i = 0; i < 2; i++) {
synchronized (lock){
if(!panZi.flag){
// 盘子里面没有包子
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 消费者吃包子
System.out.println(getName() + " 正在吃包子...");
panZi.flag = false;
// 通知生产者
System.out.println(getName() + " 包子吃完了...\n");
lock.notify();
}
}
}
}.start();
}
}
运行结果如下图:
以上案例实现了生产者消费者问题。