首页 > 代码库 > 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(); } } }
java-生产者消费者
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。