0

私は、JavaEEを使用して開発されたマルチスレッドベースのWebアプリケーションに取り組んでいます。

そのアプリケーション内には、プロデューサーとコンシューマーに似た2つのスレッドがあり、1つのスレッドがサードパーティのAPI(ソケット接続)からデータを継続的に読み取り、キャッシュに更新します。もう一方のスレッド(コンシューマー)は、キャッシュからの読み取りを継続的に試みます。

私の質問は、データに変更があった場合にのみ、コンシューマースレッドのパフォーマンスを向上させる方法があるかどうかです(つまり、キャッシュからデータを読み取るだけです)。

4

2 に答える 2

2

もちろん、BlockingQueueArrayBlockingQueueを使用してください(たとえば、のような実装を選択してください)。takeバッファにデータが利用可能になるまで、コンシューマーの呼び出しをブロック(一時停止)します。

于 2012-09-17T09:39:27.977 に答える
0

やる方法はたくさんあります。

生産者/消費者キュー(Tudorが提案するように、JavaではBlockingQueue)は1つの方法です。

また、wait()/ notify()を使用して、コンシューマーがオブジェクトを待機し、プロデューサーが更新があるときにコンシューマーに通知することもできます。Java5から始めて、そのような目的のためにConditionを利用することさえできます。

于 2012-09-17T09:52:07.210 に答える