n 個のスレッドが a を生成しBlockingQueue
ます。キューがいっぱいになると、コンシューマーはキューを空にして何らかの処理を行います。
次の 2 つの実装の選択肢からどのように決定すればよいですか?
選択肢 A : コンシューマーは定期的にキューをポーリングして、キューがいっぱいかどうか、すべてのライターが待機しているかどうかを確認します (結局のところ、これはブロッキング キューです : )。
選択肢 B : 同期された "put" メソッドを使用して独自のキューを実装します。提供された要素を配置する前に、キューがほぼ満杯でないかどうかをテストします (満杯から 1 要素を差し引いた値)。次に、要素を配置し、消費者に通知します (待機していました)。
最初の解決策は最も簡単ですが、ポーリングを行います。それは私を悩ませます。私の意見では、2 番目の解決策はエラーが発生しやすく、より多くのコーディングが必要になります。