生产者消费者模型-Java实现

Java实现生产者消费者模型

class Clerk {
    private static int productNumber = 0;//商品的数量
    private static final int MAX = 20;    //最多可以有20个商品

    public synchronized void addProduct() {
        try {
            Thread.sleep(1000);  //延时,让效果更加明显
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (productNumber == MAX) {  //如果商品数量达到上限就停止生产
            try {
                System.out.printf("现在有%d个商品,生产者进入阻塞状态。\n", productNumber);
                this.wait();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else{

            System.out.printf("现在有%d个商品,生产后有%d个商品\n",productNumber,productNumber+1);
            productNumber+=1;
        }
        this.notifyAll();//唤醒所有进程
    }

    public synchronized void consumeProduct(){

        if(productNumber==0){  //如果没有商品了
            System.out.printf("现在有%d个商品,消费者进入阻塞状态。\n",productNumber);
            try{
                this.wait();
            }catch (Exception e){
                e.printStackTrace();
            }
        }else{
            System.out.printf("现在有%d个商品,消费一个后剩下%d个商品。\n",productNumber,productNumber-1);
            productNumber-=1;
        }
        this.notifyAll();
    }
}

class Productor implements Runnable{

    private Clerk product;
    public Productor(Clerk product){
        this.product=product;
    }
    public void run(){
        while(true){
            product.addProduct();
        }
    }
}

class Consumer implements Runnable{
    private Clerk consumer;
    public Consumer(Clerk consumer){
        this.consumer=consumer;
    }

    public void run(){
        while(true) {
            this.consumer.consumeProduct();
        }
    }
}

public class TestProductConsume{
    public static void main(String[] args){
        Clerk obj = new Clerk();
        Productor productor = new Productor(obj);
        Consumer consumer=new Consumer(obj);

        Thread productThread = new Thread(productor);//创建生产者进程
        Thread consumeThread = new Thread(consumer);//创建消费者进程
        productThread.start();
        consumeThread.start();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值