并发编程-多生产-多消费-总结以及最终版本(生产一组,消费一组)
我们在之前的文章,实现了并发编程生产者-消费者模型中 syncrhonized版本,Lock基础版本,Lock-Condition进阶版本;小伙伴有兴趣可以看一下;
请参考 请参考 之前的版本肯定会有所收获
但是上边的文章都是,生产一个 消费一个,这篇文章的不同在于,可以生产一组,消费一组;
static class BoundedResource {
//创建Lock
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 obj) throws InterruptedException {
lock.lock();
try {
while(count == items.length) {
notFull.await();
}
items[putPtr] = obj;
putPtr = (putPtr + 1) % 100;
count++;
notEmpty.signal();
} finally{
lock.unlock();
}
}
public Object out() throws InterruptedException {
lock.lock();
try {
while(count == 0){
notEmpty.await();
}
Object res = items[takePtr];
takePtr = (takePtr + 1) % 100;
count--;
notFull.signal();
return res;
} finally{
lock.unlock();
}
}
}