JavaTM Platform
Standard Ed. 6

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 o, long timeout, TimeUnit unit)
          指定された要素をこのキューに挿入します。
 E peek()
          常に null を返します。
 E poll()
          別のスレッドが現在要素を利用可能にしている場合は、キューの先頭を取得して削除します。
 E poll(long timeout, TimeUnit unit)
          このキューの先頭を取得および削除します。
 void put(E o)
          指定された要素をこのキューに追加します。
 int remainingCapacity()
          常にゼロを返します。
 boolean remove(Object o)
          常に false を返します。
 boolean removeAll(Collection<?> c)
          常に false を返します。
 boolean retainAll(Collection<?> c)
          常に false を返します。
 int size()
          常にゼロを返します。
 E take()
          このキューの先頭を取得して削除します。
 Object[] toArray()
          長さがゼロの配列を返します。
<T> T[]
toArray(T[] a)
          配列の長さがゼロでない場合に、指定された配列のゼロ番目の要素を null に設定して返します。
 
クラス java.util.AbstractQueue から継承されたメソッド
add, addAll, element, remove
 
クラス java.util.AbstractCollection から継承されたメソッド
toString
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
インタフェース java.util.concurrent.BlockingQueue から継承されたメソッド
add
 
インタフェース java.util.Queue から継承されたメソッド
element, remove
 
インタフェース java.util.Collection から継承されたメソッド
addAll, equals, hashCode
 

コンストラクタの詳細

SynchronousQueue

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


SynchronousQueue

public SynchronousQueue(boolean fair)
指定された公平性ポリシーで SynchronousQueue を作成します。

パラメータ:
fair - true の場合、待機中のスレッドは FIFO の順序でアクセスが決定される。そうでない場合、順序は未指定
メソッドの詳細

put

public void put(E o)
         throws InterruptedException
指定された要素をこのキューに追加します。必要に応じて、別のスレッドが要素を受け取るまで待機します。

定義:
インタフェース BlockingQueue<E> 内の put
パラメータ:
o - 追加する要素
例外:
InterruptedException - 待機中に割り込みが発生した場合
NullPointerException - 指定された要素が null である場合

offer

public boolean offer(E o,
                     long timeout,
                     TimeUnit unit)
              throws InterruptedException
指定された要素をこのキューに挿入します。必要に応じて、指定された待機時間まで別のスレッドが要素を受け取るのを待機します。

定義:
インタフェース BlockingQueue<E> 内の offer
パラメータ:
o - 追加する要素
timeout - 処理を中止するまでの待機時間。単位は unit
unit - timeout パラメータの解釈方法を決定する TimeUnit
戻り値:
成功した場合は true、コンシューマが出現する前に指定された待機時間が経過した場合は false
例外:
InterruptedException - 待機中に割り込みが発生した場合
NullPointerException - 指定された要素が null である場合

offer

public boolean offer(E e)
別のスレッドが要素を受け取るのを待機している場合、その要素をこのキューに追加します。

定義:
インタフェース BlockingQueue<E> 内の offer
定義:
インタフェース Queue<E> 内の offer
パラメータ:
e - 追加する要素
戻り値:
このキューに要素が追加された場合は true、それ以外の場合は false
例外:
NullPointerException - 指定された要素が null である場合

take

public E take()
       throws InterruptedException
このキューの先頭を取得して削除します。必要に応じて、別のスレッドがその要素を挿入するまで待機します。

定義:
インタフェース BlockingQueue<E> 内の take
戻り値:
キューの先頭
例外:
InterruptedException - 待機中に割り込みが発生した場合

poll

public E poll(long timeout,
              TimeUnit unit)
       throws InterruptedException
このキューの先頭を取得および削除します。必要に応じて、指定された待機時間まで別のスレッドがその要素を挿入するのを待機します。

定義:
インタフェース BlockingQueue<E> 内の poll
パラメータ:
timeout - 処理を中止するまでの待機時間。単位は unit
unit - timeout パラメータの解釈方法を決定する TimeUnit
戻り値:
このキューの先頭。要素が存在する前に指定された待機時間が経過した場合は null
例外:
InterruptedException - 待機中に割り込みが発生した場合

poll

public E poll()
別のスレッドが現在要素を利用可能にしている場合は、キューの先頭を取得して削除します。

定義:
インタフェース Queue<E> 内の poll
戻り値:
キューの先頭。要素が利用不可能な場合は null

isEmpty

public boolean isEmpty()
常に true を返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の isEmpty
オーバーライド:
クラス AbstractCollection<E> 内の isEmpty
戻り値:
true

size

public int size()
常にゼロを返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の size
定義:
クラス AbstractCollection<E> 内の size
戻り値:
ゼロ

remainingCapacity

public int remainingCapacity()
常にゼロを返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース BlockingQueue<E> 内の remainingCapacity
戻り値:
ゼロ

clear

public void clear()
何も行いません。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の clear
オーバーライド:
クラス AbstractQueue<E> 内の clear

contains

public boolean contains(Object o)
常に false を返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の contains
定義:
インタフェース BlockingQueue<E> 内の contains
オーバーライド:
クラス AbstractCollection<E> 内の contains
パラメータ:
o - 要素
戻り値:
false

remove

public boolean remove(Object o)
常に false を返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の remove
定義:
インタフェース BlockingQueue<E> 内の remove
オーバーライド:
クラス AbstractCollection<E> 内の remove
パラメータ:
o - 削除する要素
戻り値:
false

containsAll

public boolean containsAll(Collection<?> c)
指定されたコレクションが空でないかぎり、false を返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の containsAll
オーバーライド:
クラス AbstractCollection<E> 内の containsAll
パラメータ:
c - コレクション
戻り値:
指定されたコレクションが空でないかぎり、false
関連項目:
AbstractCollection.contains(Object)

removeAll

public boolean removeAll(Collection<?> c)
常に false を返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の removeAll
オーバーライド:
クラス AbstractCollection<E> 内の removeAll
パラメータ:
c - コレクション
戻り値:
false
関連項目:
AbstractCollection.remove(Object), AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)
常に false を返します。SynchronousQueue には内部容量がありません。

定義:
インタフェース Collection<E> 内の retainAll
オーバーライド:
クラス AbstractCollection<E> 内の retainAll
パラメータ:
c - コレクション
戻り値:
false
関連項目:
AbstractCollection.remove(Object), AbstractCollection.contains(Object)

peek

public E peek()
常に null を返します。アクティブに待機されないかぎり、SynchronousQueue は要素を返しません。

定義:
インタフェース Queue<E> 内の peek
戻り値:
null

iterator

public Iterator<E> iterator()
常に hasNextfalse を返す空の反復子を返します。

定義:
インタフェース Iterable<E> 内の iterator
定義:
インタフェース Collection<E> 内の iterator
定義:
クラス AbstractCollection<E> 内の iterator
戻り値:
空の反復子

toArray

public Object[] toArray()
長さがゼロの配列を返します。

定義:
インタフェース Collection<E> 内の toArray
オーバーライド:
クラス AbstractCollection<E> 内の toArray
戻り値:
長さがゼロの配列

toArray

public <T> T[] toArray(T[] a)
配列の長さがゼロでない場合に、指定された配列のゼロ番目の要素を null に設定して返します。

定義:
インタフェース Collection<E> 内の toArray
オーバーライド:
クラス AbstractCollection<E> 内の toArray
パラメータ:
a - メッセージデータの長さ
戻り値:
指定された配列
例外:
NullPointerException - 指定された配列が null である場合

drainTo

public int drainTo(Collection<? super E> c)
インタフェース BlockingQueue の記述:
このキューから利用可能なすべての要素を削除し、それらを指定されたコレクションに追加します。このオペレーションは、このキューを繰り返しポーリングする場合よりも効率的な場合があります。コレクション c に要素を追加しようとしたときに障害が発生すると、関連する例外のスロー時に、要素がこのキューとコレクションのいずれにも存在しない場合と、一方または両方に存在する場合があります。キューをそれ自体に排出しようとすると、IllegalArgumentException がスローされます。また、オペレーションの進行中に指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。

定義:
インタフェース BlockingQueue<E> 内の drainTo
パラメータ:
c - 要素の転送先のコレクション
戻り値:
転送された要素の数
例外:
UnsupportedOperationException - 指定されたコレクションで追加の要素がサポートされていない場合
ClassCastException - このキューの要素のクラスが原因で、その要素を指定されたコレクションに追加できない場合
NullPointerException - 指定されたコレクションが null である場合
IllegalArgumentException - 指定されたコレクションがこのキューである場合、またはこのキューの要素のあるプロパティーが原因で指定されたコレクションに追加できない場合

drainTo

public int drainTo(Collection<? super E> c,
                   int maxElements)
インタフェース BlockingQueue の記述:
指定された数以内の利用可能な要素をこのキューから削除し、指定されたコレクションに追加します。コレクション c に要素を追加しようとしたときに障害が発生すると、関連する例外のスロー時に、要素がこのキューとコレクションのいずれにも存在しない場合と、一方または両方に存在する場合があります。キューをそれ自体に排出しようとすると、IllegalArgumentException がスローされます。また、オペレーションの進行中に指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。

定義:
インタフェース BlockingQueue<E> 内の drainTo
パラメータ:
c - 要素の転送先のコレクション
maxElements - 転送する要素の最大数
戻り値:
転送された要素の数
例外:
UnsupportedOperationException - 指定されたコレクションで追加の要素がサポートされていない場合
ClassCastException - このキューの要素のクラスが原因で、その要素を指定されたコレクションに追加できない場合
NullPointerException - 指定されたコレクションが null である場合
IllegalArgumentException - 指定されたコレクションがこのキューである場合、またはこのキューの要素のあるプロパティーが原因で指定されたコレクションに追加できない場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。