私はシンプルなプロデューサーコンシューマーモデルを書いてBluetoothからのデータを読み込み、10kバイトごとにファイルに書き込む状況があります。メッセージホルダーとしてVectorを使用した標準的なP-Cモデルを使用しました。だから私はこれを変更して複数のスレッドコンシューマが同じメッセージを読むことができるようにするにはどうすればよいでしょうか?私は実際に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;
}
私は
忙しい待っている間、消費者の(*)*ループ中にこれらの*を使用しないでください!それは本当に悪いコーディングです。 * insert()*の* wait()*を含む*ブロッキングキュー*があなたのためにすべてを処理します。 (対応する* notify()*呼び出しはどこにありますか?) – JimmyB
消費者がwait()を使用していないため、挿入時に通知する必要はありません。私のメッセージがリアルタイムである必要はないので、私は消費者の待ち時間の代わりにいくつかの睡眠を投げた。 – JPM
それでは、 "if(n == maxSize)wait();"とは何ですか? – JimmyB