所需条件
- 包子铺
- 包子属性
- 吃包子的人
1. 包子铺
package cn.等待唤醒;
public class baozipu extends Thread {
private baozi bz;
public baozipu(baozi bz){
this.bz = bz;
}
@Override
public void run(){
int count=0;
while (true){
synchronized (bz){
if (bz.flag == true){
try {
bz.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (count%2==0){
bz.pi = "包皮";
bz.xian = "三鲜馅";
}else {
bz.pi = "冰皮";
bz.xian = "牛肉大葱馅";
}
count++;
System.out.println("包子铺正在生产"+bz.pi+bz.xian+"包子");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
bz.flag = true;
bz.notify();
System.out.println("包子铺已经生产好了"+bz.pi+bz.xian+"包子");
}
}
}
}
2. 包子属性
package cn.等待唤醒;
public class baozi {
String pi;
String xian;
boolean flag = false;
}
3. 吃包子的人
package cn.等待唤醒;
public class demo extends Thread {
private baozi bz;
public demo(baozi bz){
this.bz = bz;
}
@Override
public void run(){
while (true){ synchronized (bz){
if (bz.flag==false){
try {
bz.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("吃货正在吃包子"+bz.pi+bz.xian+"包子");
bz.flag =false;
bz.notify();
System.out.println("吃货已经吃完"+bz.pi+bz.xian+"包子包子铺开始生产包子");
System.out.println("------ ---------");
}
}
}
}
5.实例化
package cn.等待唤醒;
public class demos {
public static void main(String[] args) {
baozi bz = new baozi();
new baozipu(bz).start();
new demo(bz).start();
}
}