Java多线程中经典案例——生产者与消费者

该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。

解决问题的思想:让消费者在商品为空的时候进行休眠等等待生产者运行后的唤醒 ,让生产者在商品为最大限制的时候进行休眠不再生产。

利用 wait / notifyAll 解决代码示例:

商品仓库类:

class Obj{//定义一个仓库
    //定义生产的产品goods的初始值为0;
    private int goods= 0;
    //定义仓库最多存放10件产品
    private final int MAX_SIZE = 10;
    public Obj(){
    }
    public Obj(int goods){
        this.goods=goods;
    }
  

生产者类:

class Producer implements Runnable{//定义一个生产者的类
    private Obj obj1;

    public Producer(){}

    public Producer(Obj obj1){
        this.obj1= obj1;
    }

    @Override
    public void run(){
        while(true){
            try{
                Thread.sleep(2000);
                obj1.consume();
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }

}

消费者类:

class Customer implements Runnable{//定义一个消费者的类
    private Obj obj1;

    public Customer(){}

    public Customer(Obj obj1){
        this.obj1= obj1;
    }

    @Override
    public void run(){
        while(true){
            try{
                Thread.sleep(2000);
                obj1.produce();
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }

}

主函数

public class test1 {//主函数:
    public static void main(String[] args) {
        Obj obj=new Obj();

        Thread p1 = new Thread(new Producer(obj));
        Thread p2 = new Thread(new Producer(obj));

        Thread c1 = new Thread(new Customer(obj));
        Thread c2 = new Thread(new Customer(obj));

        p1.start();
        p2.start();
        c1.start();
        c2.start();

        }

}

结果展示:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值