线程间通信wait notify

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();

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值