キュー内のオブジェクトをバッチ処理できる必要があることを除いて、JavaBlockingQueueと同じデータ構造に興味があります。つまり、プロデューサーがオブジェクトをキューに入れることができるようにしたいのですが、take()
キューが特定のサイズ(バッチサイズ)に達するまでコンシューマーブロックをオンにします。
次に、キューがバッチサイズに達すると、プロデューサーはput()
、コンシューマーがキュー内のすべての要素を消費するまでブロックする必要があります(この場合、プロデューサーは再び生産を開始し、コンシューマーはバッチに再び達するまでブロックします)。
同様のデータ構造が存在しますか?または、それを書く必要があります(私は気にしません)、何かがそこにある場合、私は自分の時間を無駄にしたくありません。
アップデート
多分少し物事を明確にするために:
状況は常に次のようになります。複数のプロデューサーがキューにアイテムを追加することもできますが、キューからアイテムを取得するコンシューマーが複数存在することはありません。
さて、問題は、これらのセットアップが並列および直列に複数あることです。つまり、プロデューサーは複数のキューのアイテムを作成しますが、コンシューマー自体もプロデューサーになることができます。これは、生産者、消費者-生産者、そして最終的には消費者の有向グラフとしてより簡単に考えることができます。
キューが空になるまでプロデューサーがブロックする必要がある理由(@Peter Lawrey)は、これらのそれぞれがスレッドで実行されるためです。スペースが利用可能になったときに単純に生成するためにそれらを残すと、一度に処理しようとするスレッドが多すぎるという状況になります。
たぶんこれを実行サービスと組み合わせると問題が解決するでしょうか?