我正在尝试实现生产者-消费者 pgm。共享资源是队列(对象数组,大小为 5)。生产者添加一个对象并通知消费者,当 q 已满时等待。消费者在 q 为空时等待,否则读取/删除并通知生产者它已完成。
无法理解的是
- 当 Producer 添加 obj 后通知时,消费者不会处于等待状态,所以 Producer 继续生产,直到 q 已满。
任何人都可以帮助如何克服这个问题。我知道某个简单的地方失踪但无法弄清楚:(
class Queue
{
public void add(Object item)
{
q[index] = item;
index++;
}
public Object get()
{
Object item = q[index - 1];
index--;
return item;
}
public boolean isQfull()
{
System.out.println("Queue:index-->" + index);
if(index == 5)
{
return true;
}
return false;
}
public boolean isQEmpty()
{
if(index == 0)
{
System.out.println("Queue:isQEmpty");
return true;
}
return false;
}
}
class Producer extends Thread
{
public void run()
{
synchronized(q)
{
for(int i=0;i<20;i++)
{
if(q.isQfull())
{
q.wait();
}
else
{
q.add(i);
q.notify();
}
}
}
}
public class Consumer extends Thread
{
public void run()
{
synchronized(q)
{
while(true)
{
if(q.isQEmpty())
{
q.wait();
}
else
{
System.out.println("Consumer consuming" + q.get());
q.notify();
}
}
}
}
}