- 型パラメータ:
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
-
メソッドのサマリー
修飾子と型 メソッド 説明 intgetWaitingConsumerCount()BlockingQueue.take()または時間指定のpoll経由で要素を受け取ることを待機しているコンシューマの推定数を返します。booleanhasWaitingConsumer()BlockingQueue.take()または時間指定のpoll経由で要素を受け取ることを待機しているコンシューマが少なくとも1つある場合、trueを返します。voidtransfer(E e)待機する必要があれば待機し、要素をコンシューマに転送します。booleantryTransfer(E e)可能な場合、待機中のコンシューマに要素をただちに転送します。booleantryTransfer(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- 処理を中止するまでの待機時間。単位はunitunit-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()の実装よりもかなり遅くなる可能性が高くなります。- 戻り値:
- 要素を受け取ることを待機しているコンシューマの数
-