- 型パラメータ:
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
- 指定された要素のあるプロパティが原因で、このキューに要素を追加できない場合
-
転送
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()
の実装よりもかなり遅くなる可能性が高くなります。- 戻り値:
- 要素を受け取ることを待機しているコンシューマの数
-