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();
         }
       } 
     }
     
  • 相关阅读:
    HDU1429:胜利大逃亡(续)
    HDU1728:逃离迷宫
    HDU1253:胜利大逃亡
    HDU1180:诡异的楼梯
    HDU1175:连连看(搜索)
    HDU1072:Nightmare
    HDU1074:Doing Homework
    Codeforces Round #259 (Div. 1)A(公式)
    HDU1430;魔板(BFS+康托展开)
    Codeforces785D
  • 原文地址:https://www.cnblogs.com/wgDream/p/7308886.html
Copyright © 2011-2022 走看看