java-生产者消费者

Posted 晴空半岛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
     }
   } 
 }
 

 

以上是关于java-生产者消费者的主要内容,如果未能解决你的问题,请参考以下文章

生产者与消费者 代码实现 java

Java生产消费者模型——代码解析

java多线程远程协作(狂神说)附上课代码

转: Java并发编程之十三:生产者—消费者模型(含代码)

java实现生产者和消费者问题的几种方式

java利用多线程实现生产者和消费者功能————美的掉渣的代码