包子实体类
public class BaoZi {
String pi;
String xian;
boolean flag=false;
}
包子铺
public class BaoZiPu extends Thread{
private BaoZi bz;
public BaoZiPu(BaoZi bz){
this.bz=bz;
}
@Override
public void run(){
int count=0;
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("有包子了");
}
}
}
消费者
public class Customer extends Thread{
private BaoZi bz;
public Customer(BaoZi bz){
this.bz=bz;
}
@Override
public void run(){
synchronized (bz){
if (bz.flag==false){
try {
bz.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("正在吃包子");
bz.flag=false;
bz.notify();
System.out.println("包子吃完了,请继续生产");
}
}
}
start
public class start_main {
public static void main(String[] args) {
BaoZi baoZi=new BaoZi();
new BaoZiPu(baoZi).start();
new Customer(baoZi).start();
}
}
waitAndNotify
public class WaitAndNotify {
public static void main(String[] args) {
Object obj =new Object();
//创建顾客线程
new Thread(){
@Override
public void run(){
synchronized (obj){
System.out.println("告诉老板要的包子种类和数量");
try {
obj.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
//唤醒之后运行的代码
System.out.println("包子做好了");
}
}
}.start();
//创建老板线程
new Thread(){
@Override
public void run(){
try {
Thread.sleep(5000);//睡眠五秒做包子
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj){
System.out.println("老板五秒之后做好包子");
obj.notify();
}
}
}.start();
}
}