1

複数のプロデューサーと単一のコンシューマーがいる状況があります。パフォーマンス上の理由から、私はコンシューマーがいかなる種類のブロッキングにもなりたくありませんが、より多くのプロデューサーが存在する可能性があるため、キューがいっぱいの場合は「ブロック」する必要があります。

そのような動作を提供するキューはありますか、または必要に応じて ArrayBlockingQueue を変更するにはどうすればよいですか?

4

2 に答える 2

2

ArrayBlockingQueue.pollコンシューマーには非ブロッキングを使用ArrayBlockingQueue.putし、プロデューサーにはブロッキングを使用します

于 2013-06-26T09:40:01.133 に答える
0

BlockingQueue実装の何が問題になっていますか? キューがいっぱいの場合、コンシューマーは非ブロッキングのブロックを呼び出すことができ、プロデューサーはどのブロックを呼び出すことができます。peek() poll()put(E e)

アップデート

キューが非常に集中的なタスクに使用されている場合、LMAX のディスラプター リング バッファーが最もパフォーマンスの高いキューイング構造である可能性があります。

于 2013-06-26T09:37:37.957 に答える