生产者消费者问题-阻塞队列

本文介绍了生产者消费者问题,这是一个经典的多线程同步案例。通过使用阻塞队列,可以避免死锁,确保生产者在缓冲区满时不添加数据,消费者在缓冲区空时不消费数据。文章还提供了利用wait()和notify()方法实现的代码示例。
摘要由CSDN通过智能技术生成

生产者消费者问题-阻塞队列:

1. 问题:

生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-buffer> problem),是一个多线程同步问题的经典案例。生产者生成一定量的数据放到缓冲区中,然后重复此过程;与此同时,消费者也在缓冲区消耗这些数据。生产者和消费者之间必须保持同步,要保证生产者不会在缓冲区满时放入数据,消费者也不会在缓冲区空时消耗数据。不够完善的解决方法容易出现死锁的情况,此时进程都在等待唤醒。


## 2. 解决思路:
  • 采用某种机制保护生产者和消费者之间的同步。有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。
  • 在生产者和消费者之间建立一个管道。管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。

3.代码实现:

wait() / notify()方法 当缓冲区已满时,生产者线程停止执行,放弃锁,使自己处于等状态,让其他线程执行;
当缓冲区已空时,消费者线程停止执行,放弃锁,使自己处于等状态,让其他线程执行。

当生产者向缓冲区放入一个产品时,向其他等待的线程发出可执行的通知,同时放弃锁,使自己处于等待状态;
当消费者从缓冲区取出一个产品时,向其他等待的线程发出可执行的通知,同时放弃锁,使自己处于等待状态。

public class TestDemo1 {
   
       static class  list1{
   
           private int[] elem;
           private int size;
           private  int first;
           private  int last;
           public list1(int MAX_SIZE) {
   
               elem = new int[MAX_SIZE];
               size = 0;
               first = 0;
               last = 0;
           }
           public void add(int i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值