我有一个情况,我写了一个简单的生产者消费者模型,用于从蓝牙读取数据块,然后每写入10k字节。我使用了一个标准的P-C模型,使用Vector作为我的消息持有者。那么,如何改变这种情况,以便多个Thread消费者可以阅读相同的消息,我认为这个术语会是Multicaster?我实际上是在Android手机上使用它,所以JMS可能不是一种选择。单生产者单消费者现在我需要多个消费者
static final int MAXQUEUE = 50000;
private Vector<byte[]> messages = new Vector<byte[]>();
/**
* Put the message in the queue for the Consumer Thread
*/
private synchronized void putMessage(byte[] send) throws InterruptedException {
while (messages.size() == MAXQUEUE)
wait();
messages.addElement(send);
notify();
}
/**
* This method is called by the consumer to see if any messages in the queue
*/
public synchronized byte[] getMessage()throws InterruptedException {
notify();
while (messages.size() == 0 && !Thread.interrupted()) {
wait(1);
}
byte[] message = messages.firstElement();
messages.removeElement(message);
return message;
}
我从奥赖利书引用代码Message Parser部分
不要使用这些* while(...)*循环在消费者忙等待!这是非常糟糕的编码。一个*阻塞队列*将为你处理所有的事情,包括* insert()*中的* wait()*。 (无论如何,相应的* notify()*调用在哪里?) – JimmyB
因为消费者没有使用wait(),所以您不需要通知插入。'while'在那里用于测试。我投入了一些睡眠而不是等待消费者,因为我的消息不需要实时。 – JPM
那么,那是什么“if(n == maxSize)wait();”? – JimmyB