多生产者多消费者

模拟KFC 厨师与顾客的操作

class KFC{
   private String name ; 
   private int count ;
   private boolean flag = false ;

//循环生产的方法 
public synchronized void set(String name ){
    while(flag)
try {wait();} catch (InterruptedException e) {}
    count++;
    this.name = "第"+count + "份"+foodName;
System.out.println(Thread.currentThread().getName()+"生产的"+this.foodName)
    flag = true ; 
    notifyAll();
    } 
//循环消费的操作
public synchronized void take(){ 
    while(!flag)
    try {wait();} catch (InterruptedException e) {} 
    System.out.println(Thread.currentThread().getName()+"...消费了"+this.foodName) 
    flag = false ; 
    notifyAll();
    } 
} 

//生产者类

class producter implements Runnable{
    private KFC kfc; 

    public Producter(KFC kfc) {
    this.kfc = kfc;
    } 

    public void run() {
        while (true) {
        kfc.set("香蕉");
        }
    }
}  

//消费者类

class customer implements Runnable{  
    private KFC kfc;

    public customer(KFC kfc) {
    super(); 
    this.kfc = kfc; 
    }
    public void run() {
        while (true) {
        kfc.take();
        }
    }
}

//测试类

public class KFCTest {
public static void main(String[] args) {
    KFC kfc = new KFC();

    Producter pro = new Producter(kfc);
    Producter pro1 = new Producter(kfc);

    customer cus = new customer(kfc);
    customer cus1 = new customer(kfc);

    Thread a = new Thread(pro);
    Thread b = new Thread(cus);
    Thread c = new Thread(pro1);
    Thread d = new Thread(cus1);

    a.start();
    b.start();
    c.start();
    d.start();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值