-
- 型パラメータ:
E
- このキューに保持されている要素の型
- すべてのスーパー・インタフェース:
BlockingQueue<E>
,Collection<E>
,Iterable<E>
,Queue<E>
- 既知のすべての実装クラス:
LinkedTransferQueue
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のメンバーです。
- 導入されたバージョン:
- 1.7
-
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 抽象メソッド 修飾子と型 メソッド 説明 int
getWaitingConsumerCount()
BlockingQueue.take()
または時間指定のpoll
経由で要素を受け取ることを待機しているコンシューマの推定数を返します。boolean
hasWaitingConsumer()
BlockingQueue.take()
または時間指定のpoll
経由で要素を受け取ることを待機しているコンシューマが少なくとも1つある場合、true
を返します。void
transfer(E e)
待機する必要があれば待機し、要素をコンシューマに転送します。boolean
tryTransfer(E e)
可能な場合、待機中のコンシューマに要素をただちに転送します。boolean
tryTransfer(E e, long timeout, TimeUnit unit)
タイム・アウトが経過する前に要素をコンシューマに転送できる場合には、そうします。-
インタフェース java.util.concurrent.BlockingQueueで宣言されたメソッド
add, contains, drainTo, drainTo, offer, offer, poll, put, remainingCapacity, remove, take
-
インタフェース java.util.Collectionで宣言されたメソッド
addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray
-
-
-
-
メソッドの詳細
-
tryTransfer
boolean tryTransfer(E e)
可能な場合、待機中のコンシューマに要素をただちに転送します。より正確には、(
BlockingQueue.take()
または時間指定のpoll
で)要素を受け取ることを待機しているコンシューマがすでに存在する場合は指定された要素をただちに転送し、それ以外の場合は要素をエンキューせずにfalse
を返します。- パラメータ:
e
- 転送する要素- 戻り値:
true
- 要素が転送された場合。それ以外の場合はfalse
- 例外:
ClassCastException
- 指定された要素のクラスが原因で、このキューにその要素を追加できない場合NullPointerException
- 指定された要素がnullである場合IllegalArgumentException
- 指定された要素のあるプロパティが原因で、このキューに要素を追加できない場合
-
transfer
void transfer(E e) throws InterruptedException
待機する必要があれば待機し、要素をコンシューマに転送します。より正確には、指定された要素の受信を(
BlockingQueue.take()
または時間指定のpoll
で)すでに待機しているコンシューマが存在する場合はその要素をただちに転送し、それ以外の場合は要素がコンシューマによって受信されるまで待機します。- パラメータ:
e
- 転送する要素- 例外:
InterruptedException
- 待機中に割り込まれた場合。この場合、要素はエンキューされたままになりませんClassCastException
- 指定された要素のクラスが原因で、このキューにその要素を追加できない場合NullPointerException
- 指定された要素がnullである場合IllegalArgumentException
- 指定された要素のあるプロパティが原因で、このキューに要素を追加できない場合
-
tryTransfer
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
- 指定された要素のあるプロパティが原因で、このキューに要素を追加できない場合
-
hasWaitingConsumer
boolean hasWaitingConsumer()
BlockingQueue.take()
または時間指定のpoll
経由で要素を受け取ることを待機しているコンシューマが少なくとも1つある場合、true
を返します。 戻り値は状況の瞬間的な状態です。- 戻り値:
- 待機中のコンシューマが少なくとも1つ存在する場合は
true
-
getWaitingConsumerCount
int getWaitingConsumerCount()
BlockingQueue.take()
または時間指定のpoll
経由で要素を受け取ることを待機しているコンシューマの推定数を返します。 戻り値は状況の瞬間的な状態の近似であるため、コンシューマが完了したり、待機を中止したりした場合に不正確になることがあります。 この値は監視およびヒューリスティックな方法に役立つ場合がありますが、同期制御のためのものではありません。 このメソッドの実装は、hasWaitingConsumer()
の実装よりもかなり遅くなる可能性が高くなります。- 戻り値:
- 要素を受け取ることを待機しているコンシューマの数
-
-