zoukankan      html  css  js  c++  java
  • java-生产者消费者

    class BoundedBuffer {
       final Lock lock = new ReentrantLock();//
       final Condition notFull  = lock.newCondition(); //生产
       final Condition notEmpty = lock.newCondition(); //消费
    
       final Object[] items = new Object[100];//存储商品的容器。
       int putptr/*生产者使用的角标*/, takeptr/*消费者使用的角标*/, count/*计数器*/;
    
        /*生产者使用的方法,往数组中存储商品*/
       public void put(Object x) throws InterruptedException {
         lock.lock();
         try {
           while (count == items.length) //判断计数器是否已到数组长度。满了。
             notFull.await();//生产就等待。
    
           items[putptr] = x; //按照角标将商品存储到数组中
    
           if (++putptr == items.length) //如果存储的角标到了数组的长度,就将角标归零。
                putptr = 0;
           ++count;//计数器自增。
           notEmpty.signal();//唤醒一个消费者
         } finally {
           lock.unlock();
         }
       }
    
       public Object take() throws InterruptedException {
         lock.lock();
         try {
           while (count == 0) //如果计数器为0,说明没有商品,消费者等待。
             notEmpty.await();
           Object x = items[takeptr]; //从数组中通过消费者角标获取商品。
    
           if (++takeptr == items.length) //如果消费的角标等于了数组的长度,将角标归零。
               takeptr = 0;
           --count;//计数器自减。
           notFull.signal();//唤醒生产者。
           return x;
         } finally {
           lock.unlock();
         }
       } 
     }
     
  • 相关阅读:
    【Python入门自学笔记专辑】——面向对象编程-实例方法11.3.6
    最简单的轮播广告(原生JS)
    (转)JavaScript一:为什么学习JavaScript?
    JAVASCRIPT中经典面试题
    使用AngularJS实现简单:全选和取消全选功能
    canvas绘制经典折线图(一)
    前端总结
    PHP如何连接MySQL数据库
    PHP预定义变量
    PHP语法
  • 原文地址:https://www.cnblogs.com/wgDream/p/7308886.html
Copyright © 2011-2022 走看看