Java 实现生产者与消费者模型(单生产与单消费)

首先创建一个商品类Goods,类中有商品库存与生产和消费的方法。
eg:商品类:

public class Goods {
    //商品名称
    private String goodsName;
    //商品库存
    private int count;
    //生产方法
    public synchronized void set(String goodsName) throws InterruptedException {
        if (this.count > 0){
            System.out.println("现在还有库存哦~");
            wait();
        }
        this.goodsName = goodsName;
        this.count = count +1;
        Thread.sleep(1000);
        System.out.println("生产:"+toString());
        //生产完通知消费者线程可以消费了
        notify();
    }

    public synchronized void get() throws InterruptedException {
        if (this.count == 0){
            System.out.println("商品已售完、请稍候~");
            wait();
        }
        //每次消费一个产品
        this.count -= 1;
        Thread.sleep(1000);
        System.out.println("消费"+ toString());
        notify();
    }

    @Override
    public String toString() {
        return "Goods{" +
                "goodsName='" + goodsName + '\'' +
                ", count=" + count +
                '}';
    }
}

创建生产者与消费者类:

eg:生产者类:

public class Producer implements Runnable {

    private Goods goods;

    public Producer(Goods goods) {
        this.goods = goods;
    }
    @Override
    public void run() {
        try {
            this.goods.set("阿玛尼限量联名口红");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

消费者类:

public class Consumer implements Runnable {
    private Goods goods;

    public Consumer(Goods goods) {
        this.goods = goods;
    }
    @Override
    public void run() {
        try {
            this.goods.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

测试类:

public class TestPC {
    public static void main(String[] args) {
        Goods goods = new Goods();
        Thread produceThread = new Thread(new Producer(goods),"生产者线程");
        Thread consumerThread = new Thread(new Consumer(goods),"消费者线程");
        produceThread.start();
        consumerThread.start();
    }
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值