現在、複数のプロデューサーと単一のコンシューマーを持つキューがあります。
コンシューマ スレッドの動作が遅い。また、コンシューマーはピーク操作によってキューから要素を取得し、消費操作が完了するまで、要素をキューから削除することはできません。これは、プロデューサー スレッドがサイド オペレーションとして、その時点で完全に処理されていないすべての要素のスナップショットも取得するためです。
ここで、複数のコンシューマーをサポートするようにコードを変更したいと考えています。たとえば、3 つのスレッドがあるとします。1 つのスレッドが最初の要素を取得し、peek 操作で読み取ることができます。2 番目のコンシューマー スレッドは 2 番目の要素を取得できますが、キューが 2 番目の要素の取得をサポートしていないため、それを取得する方法がありません。
そのため、標準の ConcurrentLinkedQueue (私が現在使用している) を使用するオプションはありません。
プライオリティ キューを使用することを考えていますが、各要素に、この要素が既にスレッドによって使用されているかどうかを示すフラグを関連付ける必要があります。
この問題に最も適したデータ構造はどれですか?