モジュール java.base
パッケージ java.util.concurrent

インタフェースTransferQueue<E>

  • 型パラメータ:
    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のキューでは、puttransferは事実上同義であることに注意してください。

    このインタフェースは、Java Collections Frameworkのメンバーです。

    導入されたバージョン:
    1.7
    • メソッドの詳細

      • 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()の実装よりもかなり遅くなる可能性が高くなります。
        戻り値:
        要素を受け取ることを待機しているコンシューマの数