2011-05-06 6 views
0

Java Tutorialsには、ガードブロックを使用するプロデューサ/コンシューマアプリケーションの基本exampleが含まれています。また、notifyとnotifyAllの違いと典型的な使用例を簡単に説明します。プロデューサ/コンシューマアプリケーションで通知するvs notifyAll

のコード例について私の質問:

それはプットのコードを変更し、(通知を使用する方法に

//Notify producer that status has changed. 
    notifyAll(); 

//Notify consumer that status has changed. 
    notifyAll(); 

を取ることが可能である)の代わりに、 notifyAll()はまだProducer-Consumerパターンの正しい実装を持っていますか?

+1

ほとんどの場合はいですが、消費者が何をすべきかによって異なります。 – Kaj

+0

ご参考までに:notify/notifyAll/waitは、本当に必要がない限り、低レベルのレベルを使用しません。私はExecutorServiceとおそらく別のQueueを使います。 –

答えて

0

複数のコンシューマ(またはプロデューサ)が存在する場合は、それらのすべてに通知する必要がある場合は、1つのコンシューマだけが目覚めて消費し、他のコンシューマはすべて、プロデューサが突発的に目を覚ますまでスリープします。 ほとんどの場合、私はnotifyAll()がより良い(つまりパフォーマンスは最低ですが、問題は少ない)ことがわかりました。

+0

それは、消費者が何をしているかによって決まるということです。 1つの消費者が生成されたイベントを消費するようにすることは、非常に一般的です。残りは待つでしょう。 – Kaj

関連する問題