wait 等待 notify 唤醒
在sychornize 保证线程安全之后,如何协调线程先后顺序?没错就是我wait跟 notify。调用wait等待,然后调用notify唤醒其他满足条件的线程。例子:包子铺生产,顾客吃,包子本身。
思路很重要!!! 别上来就写代码,顺一下逻辑。
包子铺:继承线程类,任务是生产包子。
1 判断包子状态,如果有,包子铺就wait,没有就生产
2生产之后,改变包子状态,
3唤醒顾客买包子
顾客:买
1看有没有,根据flag判断。
2没有就调用wait(),有就买。
public class Bpu extends Thread{
private Bao bao; //创建包子对象
public Bpu(Bao bao){ //传入包子,构建对象
this.bao=bao;
}
public run(){
sychornized(bao){
if(flag==true){ //有包子 线程等待
try{
bao.wait();
}catch(){}
}
sy("生产包子"); //flag为false没有包子时,执行生产操作
flag=true;//生产之后改变状态
bao.notify(); //唤醒顾客线程
}
}
}
public class Buyer extends Thread{
private Bao bao;
public Buyer(Bao bao){
this.bao=bao;
}
public run(){
syschornize(bao){
if( flag==true){
sys("买包子");
flag=false;//没包子了,改状态
bao.notify();//唤醒包子铺做包子
}
bao.wait();
}
}
}
public class Bao {
String name;
}
main(){
Bao bao =new Bao();
new Bpu(bao).start();
new Buyer(bao).start();
}