我有一個正常工作的生產者/消費者模式。 它有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();
}
}
}
}