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

クラスSynchronousQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.SynchronousQueue<E>
型パラメータ:
E - このキューに保持されている要素の型
すべての実装されたインタフェース:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>

public class SynchronousQueue<E>
extends AbstractQueue<E>
implements BlockingQueue<E>, Serializable
各挿入オペレーションが別のスレッドによる対応する削除オペレーションを待機する必要がある(およびその逆の) ブロッキング・キューです。 同期キューには、内部容量がまったくありません。 要素が存在するのは削除しようとするときのみなので、同期キューでpeekを実行することはできません。別のスレッドが削除を試みていないかぎり、どのメソッドを使用しても要素を挿入することはできません。反復するものが存在しないため、反復は実行できません。 キューの先頭は、挿入処理スレッドがキューに追加しようとする、最初にキューに入れられた要素です。そのようなキューに入れられたスレッドが存在しない場合は、削除できる要素はなく、poll()nullを返します。 他のCollectionメソッド(containsなど)の目的のために、SynchronousQueueは空のコレクションとして機能します。 このキューでは、null要素は許可されません。

同期キューは、CSPおよびAdaで使用されるランデブー・チャネルに似ています。 これらはハンドオフ設計に最適です。ハンドオフ設計では、情報、イベント、またはタスクを渡すために、あるスレッドで実行中のオブジェクトを別のスレッドで実行中のオブジェクトと同期させる必要があります。

このクラスでは、待機中のプロデューサおよびコンシューマ・スレッドの順序付けのためのオプションの公平性ポリシーをサポートします。 デフォルトでは、この順序付けは保証されていません。 ただし、公平性をtrueに設定して構築されたキューでは、スレッドがFIFOの順序でアクセスすることが許可されます。

このクラスとそのイテレータは、CollectionおよびIteratorインタフェースのオプション・メソッドすべてを実装します。

このクラスは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.5
関連項目:
直列化された形式
  • コンストラクタのサマリー

    コンストラクタ 
    コンストラクタ 説明
    SynchronousQueue()
    不公平アクセス・ポリシーでSynchronousQueueを作成します。
    SynchronousQueue​(boolean fair)
    指定された公平性ポリシーでSynchronousQueueを作成します。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    void clear()
    何も行いません。
    boolean contains​(Object o)
    常にfalseを返します。
    boolean containsAll​(Collection<?> c)
    指定されたコレクションが空でないかぎり、falseを返します。
    int drainTo​(Collection<? super E> c)
    このキューから利用可能なすべての要素を削除し、それらを指定されたコレクションに追加します。
    int drainTo​(Collection<? super E> c, int maxElements)
    指定された数以内の利用可能な要素をこのキューから削除し、指定されたコレクションに追加します。
    boolean isEmpty()
    常にtrueを返します。
    Iterator<E> iterator()
    常にhasNextfalseを返す空のイテレータを返します。
    boolean offer​(E e)
    別のスレッドが要素を受け取るのを待機している場合、その要素をこのキューに追加します。
    boolean offer​(E e, long timeout, TimeUnit unit)
    指定された要素をこのキューに挿入します。必要に応じて、指定された待機時間まで別のスレッドが要素を受け取るのを待機します。
    E peek()
    常にnullを返します。
    E poll()
    別のスレッドが現在要素を利用可能にしている場合は、キューの先頭を取得して削除します。
    E poll​(long timeout, TimeUnit unit)
    このキューの先頭を取得および削除します。必要に応じて、指定された待機時間まで別のスレッドがその要素を挿入するのを待機します。
    void put​(E e)
    指定された要素をこのキューに追加します。必要に応じて、別のスレッドが要素を受け取るまで待機します。
    int remainingCapacity()
    常にゼロを返します。
    boolean remove​(Object o)
    常にfalseを返します。
    boolean removeAll​(Collection<?> c)
    常にfalseを返します。
    boolean retainAll​(Collection<?> c)
    常にfalseを返します。
    int size()
    常にゼロを返します。
    Spliterator<E> spliterator()
    trySplitを呼び出すと常にnullが返される空のスプリッテレータを返します。
    E take()
    このキューの先頭を取得して削除します。必要に応じて、別のスレッドがその要素を挿入するまで待機します。
    Object[] toArray()
    長さがゼロの配列を返します。
    <T> T[] toArray​(T[] a)
    指定された配列の0番目の要素をnull (配列の長さがゼロ以外の場合)に設定して返します。
    String toString()
    常に"[]"を返します。

    クラス java.util.AbstractQueueで宣言されたメソッド

    add, addAll, element, remove

    クラス java.lang.Objectで宣言されたメソッド

    cloneequalsfinalizegetClasshashCodenotifynotifyAllwaitwaitwait

    インタフェース java.util.concurrent.BlockingQueueで宣言されたメソッド

    add

    インタフェース java.util.Collectionで宣言されたメソッド

    addAll, equals, hashCode, parallelStream, removeIf, stream, toArray

    インタフェース java.lang.Iterableで宣言されたメソッド

    forEach

    インタフェース java.util.Queueで宣言されたメソッド

    element, remove
  • コンストラクタの詳細

    • SynchronousQueue

      public SynchronousQueue()
      不公平アクセス・ポリシーでSynchronousQueueを作成します。
    • SynchronousQueue

      public SynchronousQueue​(boolean fair)
      指定された公平性ポリシーでSynchronousQueueを作成します。
      パラメータ:
      fair - trueの場合、待機中のスレッドはFIFOの順序でアクセスが決定される。それ以外の場合、順序は指定されない。
  • メソッドの詳細

    • put

      public void put​(E e) throws InterruptedException
      指定された要素をこのキューに追加します。必要に応じて、別のスレッドが要素を受け取るまで待機します。
      定義:
      put、インタフェース: BlockingQueue<E>
      パラメータ:
      e - 追加する要素
      例外:
      InterruptedException - 待機中に割込みが発生した場合
      NullPointerException - 指定された要素がnullである場合
    • offer

      public boolean offer​(E e, long timeout, TimeUnit unit) throws InterruptedException
      指定された要素をこのキューに挿入します。必要に応じて、指定された待機時間まで別のスレッドが要素を受け取るのを待機します。
      定義:
      offer、インタフェース: BlockingQueue<E>
      パラメータ:
      e - 追加する要素
      timeout - 処理を中止するまでの待機時間。単位はunit
      unit - timeoutパラメータの解釈方法を決定するTimeUnit
      戻り値:
      成功した場合はtrue。コンシューマが出現する前に指定された待機時間が経過した場合はfalse
      例外:
      InterruptedException - 待機中に割込みが発生した場合
      NullPointerException - 指定された要素がnullである場合
    • offer

      public boolean offer​(E e)
      別のスレッドが要素を受け取るのを待機している場合、その要素をこのキューに追加します。
      定義:
      offer、インタフェース: BlockingQueue<E>
      定義:
      offer、インタフェース: Queue<E>
      パラメータ:
      e - 追加する要素
      戻り値:
      このキューに要素が追加された場合はtrue、それ以外の場合はfalse
      例外:
      NullPointerException - 指定された要素がnullである場合
    • take

      public E take() throws InterruptedException
      このキューの先頭を取得して削除します。必要に応じて、別のスレッドがその要素を挿入するまで待機します。
      定義:
      take、インタフェース: BlockingQueue<E>
      戻り値:
      キューの先頭
      例外:
      InterruptedException - 待機中に割込みが発生した場合
    • poll

      public E poll​(long timeout, TimeUnit unit) throws InterruptedException
      このキューの先頭を取得および削除します。必要に応じて、指定された待機時間まで別のスレッドがその要素を挿入するのを待機します。
      定義:
      poll、インタフェース: BlockingQueue<E>
      パラメータ:
      timeout - 処理を中止するまでの待機時間。単位はunit
      unit - timeoutパラメータの解釈方法を決定するTimeUnit
      戻り値:
      このキューの先頭。要素が存在する前に指定された待機時間が経過した場合はnull
      例外:
      InterruptedException - 待機中に割込みが発生した場合
    • poll

      public E poll()
      別のスレッドが現在要素を利用可能にしている場合は、キューの先頭を取得して削除します。
      定義:
      poll、インタフェース: Queue<E>
      戻り値:
      このキューの先頭。要素が使用できない場合はnull
    • isEmpty

      public boolean isEmpty()
      常にtrueを返します。 SynchronousQueueには内部容量がありません。
      定義:
      isEmpty、インタフェース: Collection<E>
      オーバーライド:
      isEmpty、クラス: AbstractCollection<E>
      戻り値:
      true
    • size

      public int size()
      常にゼロを返します。 SynchronousQueueには内部容量がありません。
      定義:
      size、インタフェース: Collection<E>
      戻り値:
      0
    • remainingCapacity

      public int remainingCapacity()
      常にゼロを返します。 SynchronousQueueには内部容量がありません。
      定義:
      remainingCapacity、インタフェース: BlockingQueue<E>
      戻り値:
      0
    • clear

      public void clear()
      何も行いません。 SynchronousQueueには内部容量がありません。
      定義:
      clear、インタフェース: Collection<E>
      オーバーライド:
      clear、クラス: AbstractQueue<E>
    • contains

      public boolean contains​(Object o)
      常にfalseを返します。 SynchronousQueueには内部容量がありません。
      定義:
      contains、インタフェース: BlockingQueue<E>
      定義:
      contains、インタフェース: Collection<E>
      オーバーライド:
      contains、クラス: AbstractCollection<E>
      パラメータ:
      o - 要素
      戻り値:
      false
    • remove

      public boolean remove​(Object o)
      常にfalseを返します。 SynchronousQueueには内部容量がありません。
      定義:
      remove、インタフェース: BlockingQueue<E>
      定義:
      remove、インタフェース: Collection<E>
      オーバーライド:
      remove、クラス: AbstractCollection<E>
      パラメータ:
      o - 削除する要素
      戻り値:
      false
    • containsAll

      public boolean containsAll​(Collection<?> c)
      指定されたコレクションが空でないかぎり、falseを返します。 SynchronousQueueには内部容量がありません。
      定義:
      containsAll、インタフェース: Collection<E>
      オーバーライド:
      containsAll、クラス: AbstractCollection<E>
      パラメータ:
      c - コレクション
      戻り値:
      指定されたコレクションが空でないかぎりfalse
      関連項目:
      AbstractCollection.contains(Object)
    • removeAll

      public boolean removeAll​(Collection<?> c)
      常にfalseを返します。 SynchronousQueueには内部容量がありません。
      定義:
      removeAll、インタフェース: Collection<E>
      オーバーライド:
      removeAll、クラス: AbstractCollection<E>
      パラメータ:
      c - コレクション
      戻り値:
      false
      関連項目:
      AbstractCollection.remove(Object), AbstractCollection.contains(Object)
    • retainAll

      public boolean retainAll​(Collection<?> c)
      常にfalseを返します。 SynchronousQueueには内部容量がありません。
      定義:
      retainAll、インタフェース: Collection<E>
      オーバーライド:
      retainAll、クラス: AbstractCollection<E>
      パラメータ:
      c - コレクション
      戻り値:
      false
      関連項目:
      AbstractCollection.remove(Object), AbstractCollection.contains(Object)
    • peek

      public E peek()
      常にnullを返します。 アクティブに待機されないかぎり、SynchronousQueueは要素を返しません。
      定義:
      peek、インタフェース: Queue<E>
      戻り値:
      null
    • iterator

      public Iterator<E> iterator()
      常にhasNextfalseを返す空のイテレータを返します。
      定義:
      iterator、インタフェース: Collection<E>
      定義:
      iterator、インタフェース: Iterable<E>
      定義:
      iterator、クラス: AbstractCollection<E>
      戻り値:
      空のイテレータ
    • spliterator

      public Spliterator<E> spliterator()
      trySplitを呼び出すと常にnullが返される空のスプリッテレータを返します。
      定義:
      spliterator、インタフェース: Collection<E>
      定義:
      spliterator、インタフェース: Iterable<E>
      戻り値:
      空のスプリッテレータ
      導入されたバージョン:
      1.8
    • toArray

      public Object[] toArray()
      長さがゼロの配列を返します。
      定義:
      toArray、インタフェース: Collection<E>
      オーバーライド:
      toArray、クラス: AbstractCollection<E>
      戻り値:
      長さがゼロの配列
    • toArray

      public <T> T[] toArray​(T[] a)
      指定された配列の0番目の要素をnull (配列の長さがゼロ以外の場合)に設定して返します。
      定義:
      toArray、インタフェース: Collection<E>
      オーバーライド:
      toArray、クラス: AbstractCollection<E>
      型パラメータ:
      T - コレクションを格納する配列のコンポーネント型
      パラメータ:
      a - 配列
      戻り値:
      指定された配列
      例外:
      NullPointerException - 指定された配列がnullである場合
    • toString

      public String toString()
      常に"[]"を返します。
      オーバーライド:
      toString、クラス: AbstractCollection<E>
      戻り値:
      "[]"
    • drainTo

      public int drainTo​(Collection<? super E> c)
      インタフェースからコピーされた説明: BlockingQueue
      このキューから利用可能なすべての要素を削除し、それらを指定されたコレクションに追加します。 このオペレーションは、このキューを繰返しポーリングする場合よりも効率的な場合があります。 コレクションcに要素を追加しようとしたときに障害が発生すると、関連する例外のスロー時に、要素がこのキューとコレクションのいずれにも存在しない場合と、一方または両方に存在する場合があります。 キューをそれ自体に排出しようとすると、IllegalArgumentExceptionがスローされます。 また、オペレーションの進行中に指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。
      定義:
      drainTo、インタフェース: BlockingQueue<E>
      パラメータ:
      c - 要素の転送先のコレクション
      戻り値:
      転送された要素の数
      例外:
      UnsupportedOperationException - 指定されたコレクションで追加の要素がサポートされていない場合
      ClassCastException - このキューの要素のクラスが原因で、その要素を指定されたコレクションに追加できない場合
      NullPointerException - 指定されたコレクションがnullである場合
      IllegalArgumentException - 指定されたコレクションがこのキューである場合、またはこのキューの要素のあるプロパティが原因で指定されたコレクションに追加できない場合
    • drainTo

      public int drainTo​(Collection<? super E> c, int maxElements)
      インタフェースからコピーされた説明: BlockingQueue
      指定された数以内の利用可能な要素をこのキューから削除し、指定されたコレクションに追加します。 コレクションcに要素を追加しようとしたときに障害が発生すると、関連する例外のスロー時に、要素がこのキューとコレクションのいずれにも存在しない場合と、一方または両方に存在する場合があります。 キューをそれ自体に排出しようとすると、IllegalArgumentExceptionがスローされます。 また、オペレーションの進行中に指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。
      定義:
      drainTo、インタフェース: BlockingQueue<E>
      パラメータ:
      c - 要素の転送先のコレクション
      maxElements - 転送する要素の最大数
      戻り値:
      転送された要素の数
      例外:
      UnsupportedOperationException - 指定されたコレクションで追加の要素がサポートされていない場合
      ClassCastException - このキューの要素のクラスが原因で、その要素を指定されたコレクションに追加できない場合
      NullPointerException - 指定されたコレクションがnullである場合
      IllegalArgumentException - 指定されたコレクションがこのキューである場合、またはこのキューの要素のあるプロパティが原因で指定されたコレクションに追加できない場合