java 多线程-生产消费者者模式

独立写了一个生产消费者的模式,加强理解多线程编程及线程间的同步及信息交换。
要点:
1、在启动线程时,先需启动生产者。
2、生产者生产满了后,就不能再生产,进入等待状态,直到有消费者进行消费。
3、消费者进行消费时,若没有,则不能进行消费,进入等待状态。直到生产者生产了。

public class TestProduct {
public static void main(String[] args){
final Product pro = new Product();
ExecutorService service = Executors.newCachedThreadPool();
for(int j=0; j<2; j++){
new Thread(){
public void run()
{
pro.putEgg();
//pro.getEgg();

};

}.start();
for(int i=0; i<2; i++){
new Thread(){
public void run()
{
pro.getEgg();
//pro.putEgg();

};

}.start();
}
}
}

}


public class Product {

private boolean flag = true;// true:盘中没有鸡蛋,false 盘中有鸡蛋
//盘中有鸡蛋则唤醒其它的线程可以来取了,盘中无鸡蛋,则此于等待状态,等着来放鸡蛋。

//放鸡蛋
public synchronized void putEgg(){
//如果盘中没有鸡蛋
if(flag){
flag = false;
System.out.println(Thread.currentThread().getName()+" 盘中放入了一个鸡蛋了,可以取鸡蛋了");
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
notify();


}
//取鸡蛋

public synchronized String getEgg()
{
//如果有鸡蛋,则取出鸡蛋
String jidan;
if(!flag)
{
System.out.println(Thread.currentThread().getName()+" 已经取出来一个鸡蛋了");
flag = true;
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
return null;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值