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-生产者消费者的主要内容,如果未能解决你的问题,请参考以下文章