E
- このコレクション内に保持される要素の型public interface TransferQueue<E> extends BlockingQueue<E>
BlockingQueue
。TransferQueue
は、たとえば、プロデューサが (transfer(E)
メソッドを使用して) take
または poll
を呼び出しているコンシューマによる要素の受信を待機する場合と、受信を待機せずに (put
メソッド経由で) 要素をキューに入れる場合がある、メッセージ受け渡しアプリケーションで役立つことがあります。tryTransfer
の非ブロックバージョンやタイムアウトバージョンも使用できます。また、項目を待機しているスレッドが存在するかどうかを (hasWaitingConsumer()
経由で) TransferQueue
に照会することもできます。これは、peek
操作と逆になります。
ほかのブロッキングキューと同様に、TransferQueue
は、容量が制限される場合があります。その場合、試行される転送操作では、最初に使用可能な容量の待機をブロックし、そのあとでコンシューマによる受信の待機をブロックすることができます。SynchronousQueue
などの、容量が 0 のキューでは、put
と transfer
は事実上同義であることに注意してください。
このインタフェースは、Java Collections Framework のメンバーです。
修飾子と型 | メソッドと説明 |
---|---|
int |
getWaitingConsumerCount()
BlockingQueue.take() または時間指定の poll 経由で要素を受け取ることを待機しているコンシューマの推定数を返します。 |
boolean |
hasWaitingConsumer()
|
void |
transfer(E e)
待機する必要があれば待機し、要素をコンシューマに転送します。
|
boolean |
tryTransfer(E e)
可能な場合、待機中のコンシューマに要素をただちに転送します。
|
boolean |
tryTransfer(E e, long timeout, TimeUnit unit)
タイムアウトが経過する前に要素をコンシューマに転送できる場合には、そうします。
|
boolean tryTransfer(E e)
より正確には、(BlockingQueue.take()
または時間指定の poll
で) 要素を受け取ることを待機しているコンシューマがすでに存在する場合は指定された要素をただちに転送し、それ以外の場合は要素をエンキューせずに false
を返します。
e
- 転送する要素true
- 要素が転送された場合。それ以外の場合は false
ClassCastException
- 指定された要素のクラスが原因で、このキューにその要素を追加できない場合NullPointerException
- 指定された要素が null である場合IllegalArgumentException
- 指定された要素のあるプロパティーが原因で、このキューに要素を追加できない場合void transfer(E e) throws InterruptedException
より正確には、指定された要素の受信を (BlockingQueue.take()
または時間指定の poll
で) すでに待機しているコンシューマが存在する場合はその要素をただちに転送し、それ以外の場合は要素がコンシューマによって受信されるまで待機します。
e
- 転送する要素InterruptedException
- 待機中に割り込まれた場合。この場合、要素はエンキューされたままになりませんClassCastException
- 指定された要素のクラスが原因で、このキューにその要素を追加できない場合NullPointerException
- 指定された要素が null である場合IllegalArgumentException
- 指定された要素のあるプロパティーが原因で、このキューに要素を追加できない場合boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException
より正確には、指定された要素の受信を (BlockingQueue.take()
または時間指定の poll
で) すでに待機しているコンシューマが存在する場合はその要素をただちに転送し、それ以外の場合は要素がコンシューマによって受信されるまで待機します。その要素を転送できるようになる前に、指定された待機時間が経過した場合は false
を返します。
e
- 転送する要素timeout
- 処理を中止するまでの待機時間。単位は unit
unit
- timeout
パラメータの解釈方法を決定する TimeUnit
true
、完了前に指定された待機時間が経過した場合は false
で、この場合、要素はエンキューされたままになりませんInterruptedException
- 待機中に割り込まれた場合。この場合、要素はエンキューされたままになりませんClassCastException
- 指定された要素のクラスが原因で、このキューにその要素を追加できない場合NullPointerException
- 指定された要素が null である場合IllegalArgumentException
- 指定された要素のあるプロパティーが原因で、このキューに要素を追加できない場合boolean hasWaitingConsumer()
BlockingQueue.take()
または時間指定の poll
経由で要素を受け取ることを待機しているコンシューマが少なくとも 1 つある場合、true
を返します。戻り値は状況の瞬間的な状態です。true
int getWaitingConsumerCount()
BlockingQueue.take()
または時間指定の poll
経由で要素を受け取ることを待機しているコンシューマの推定数を返します。戻り値は状況の瞬間的な状態の近似であるため、コンシューマが完了したり、待機を中止したりした場合に不正確になることがあります。この値は監視およびヒューリスティックな方法に役立つ場合がありますが、同期制御のためのものではありません。このメソッドの実装は、hasWaitingConsumer()
の実装よりもかなり遅くなる可能性が高くなります。 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.