私が必要とするソケット接続からアイテムを読み取る Java アプリケーションでは (ここでは詳しく説明しない理由により)、
- それらの順序が保持されるように、単一のスレッドによって処理される入力項目。
- 他のアイテムがまだ処理されている間に新しいアイテムをソケットから読み取ることができるように、処理前にバッファリングされる入力アイテム。
- バッファがいっぱいである限りブロックされる読み取りスレッド
したがって、実際には、単一のワーカー スレッドを使用して、ソケットから受信したバッファリングされたアイテムを処理したいと考えています。そして、ワーカー スレッドとリーダー スレッドの間のバッファーとして適切なキューがありSynchronousQueue
、FIFO 容量を備えた一種のフェアになります。
必要なキューは、満杯でない場合はArrayBlockingQueue
またはLinkedBlockingQueue
容量あり のように動作し、満杯のSynchronousQueue
場合のように動作する必要があります。
put
キューがいっぱいの場合にのみスレッドをブロックしますtake
キューが空の場合にのみスレッドをブロックしますtake
満杯のキューでは、呼び出し元に次の FIFO 要素が与えられ、ブロックが解除され、put
操作で待機している次のスレッドから要素が挿入されますput
空のキューでは、操作で待機しているスレッドに要素を渡すか、要素をpoll
挿入します
そのような既知の実装はありますか、それとも独自に展開する必要がありますか?