我有一个正常工作的生产者/消费者模式。 它有1个生产者和N个消费者。Producer消费者修改
现在我##标题##试图生产,然后同时消费,但仍然使用1生产者和N消费者线程。
所以基本上它应该像农产品() - >消费(),生产() - >消费(),生产() - >消耗()...
,但现在,我有多个消费者线程我希望他们在该条件等待(),所以如果之后产生() - >消耗()另一个消耗()发生的地方它等待。
所以说我有1生产者和消费者4它可能看起来像这样:
农产品() - >消耗() - >消耗()await->消耗()等待() - >消耗。 () - >生产() - > ...
问题:代码的作品,但我不明白,后生产者线程进入cond.await();他怎么能仍然调用cond1.signalAll();? 连续代码不应该在cond.await()处停止吗?
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Processor {
private Lock lock = new ReentrantLock();
private Condition cond = lock.newCondition();
private Condition cond1 = lock.newCondition();
private int Counter = 0;
public void produce() throws InterruptedException {
while(true) {
lock.lock();
try {
Counter++;
System.out.println("Increased by one");
Thread.sleep(1000);
cond.await();
cond1.signalAll();
} finally {
lock.unlock();
}
}
}
public void consume() throws InterruptedException{
while(true) {
lock.lock();
try {
while(Counter==0) {
cond1.await();
}
Counter--;
System.out.println("Decreased by one!");
Thread.sleep(1000);
cond.signalAll();
}
finally {
lock.unlock();
}
}
}
}