JavaTM Platform
Standard Ed. 6

java.util.concurrent
クラス ArrayBlockingQueue<E>

java.lang.Object
  上位を拡張 java.util.AbstractCollection<E>
      上位を拡張 java.util.AbstractQueue<E>
          上位を拡張 java.util.concurrent.ArrayBlockingQueue<E>
型パラメータ:
E - コレクション内に存在する要素の型
すべての実装されたインタフェース:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>

public class ArrayBlockingQueue<E>
extends AbstractQueue<E>
implements BlockingQueue<E>, Serializable

配列に連動するバウンド形式のブロッキングキューです。このキューは FIFO (先入れ先出し) で要素を順序付けします。このキューの「先頭」は、キューに入っていた時間がもっとも長い要素です。このキューの「末尾」は、キューに入っていた時間がもっとも短い要素です。新しい要素はキューの末尾に挿入され、キュー取得オペレーションにより、キューの先頭の要素が取得されます。  

これは旧来の「バウンドバッファー」であり、その内部では固定サイズの配列が要素を保持し、これらの要素はプロデューサにより挿入され、コンシューマにより抽出されます。作成後に、容量を増やすことはできません。キューが埋まっているときに要素を put しようとすると、put オペレーションがブロックされます。空のキューから要素を take しようとした場合も、同様にブロックされます。  

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

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

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

導入されたバージョン:
1.5
関連項目:
直列化された形式

コンストラクタの概要
ArrayBlockingQueue(int capacity)
          指定された (固定) 容量とデフォルトのアクセスポリシーを持つ ArrayBlockingQueue を作成します。
ArrayBlockingQueue(int capacity, boolean fair)
          指定された (固定) 容量と指定されたアクセスポリシーを持つ ArrayBlockingQueue を作成します。
ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
          指定された (固定) 容量と指定されたアクセスポリシーを持ち、指定されたコレクションの要素を初期状態で含む (要素はコレクションの反復子のトラバーサル順に追加) ArrayBlockingQueue を作成します。
 
メソッドの概要
 boolean add(E e)
          キューの容量を超えずにすぐ実行できる場合は、指定された要素をこのキューの末尾に挿入します。
 void clear()
          すべての要素をこのキューから原子的に削除します。
 boolean contains(Object o)
          指定された要素がキューに含まれている場合に true を返します。
 int drainTo(Collection<? super E> c)
          このキューから利用可能なすべての要素を削除し、それらを指定されたコレクションに追加します。
 int drainTo(Collection<? super E> c, int maxElements)
          指定された数以内の利用可能な要素をこのキューから削除し、指定されたコレクションに追加します。
 Iterator<E> iterator()
          このキュー内の要素を適切な順序で繰り返し処理する反復子を返します。
 boolean offer(E e)
          キューの容量を超えずに指定された要素をこのキューの末尾にすぐ挿入できる場合は、そうします。
 boolean offer(E e, long timeout, TimeUnit unit)
          指定された要素をこのキューの末尾に挿入します。
 E peek()
          キューの先頭を取得しますが、削除しません。
 E poll()
          キューの先頭を取得および削除します。
 E poll(long timeout, TimeUnit unit)
          このキューの先頭を取得して削除します。
 void put(E e)
          指定された要素をこのキューの末尾に挿入します。
 int remainingCapacity()
          理想的な状態 (メモリーやリソースの制限がない状態) で、このキューがブロックせずに受け入れることができる追加要素の数を返します。
 boolean remove(Object o)
          指定された要素の単一のインスタンスがこのキューに存在する場合は、キューから削除します。
 int size()
          キュー内にある要素の数を返します。
 E take()
          このキューの先頭を取得して削除します。
 Object[] toArray()
          キュー内のすべての要素を適切な順序で含む配列を返します。
<T> T[]
toArray(T[] a)
          キュー内のすべての要素を適切な順序で含む配列を返します。
 String toString()
          このコレクションの文字列表現を返します。
 
クラス java.util.AbstractQueue から継承されたメソッド
addAll, element, remove
 
クラス java.util.AbstractCollection から継承されたメソッド
containsAll, isEmpty, removeAll, retainAll
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
インタフェース java.util.Queue から継承されたメソッド
element, remove
 
インタフェース java.util.Collection から継承されたメソッド
addAll, containsAll, equals, hashCode, isEmpty, removeAll, retainAll
 

コンストラクタの詳細

ArrayBlockingQueue

public ArrayBlockingQueue(int capacity)
指定された (固定) 容量とデフォルトのアクセスポリシーを持つ ArrayBlockingQueue を作成します。

パラメータ:
capacity - このキューの容量
例外:
IllegalArgumentException - capacity が 1 未満の場合

ArrayBlockingQueue

public ArrayBlockingQueue(int capacity,
                          boolean fair)
指定された (固定) 容量と指定されたアクセスポリシーを持つ ArrayBlockingQueue を作成します。

パラメータ:
capacity - このキューの容量
fair - true の場合、挿入または削除でブロックされたスレッドに対するキューアクセスが FIFO の順序で処理される。false の場合、アクセス順は指定されない
例外:
IllegalArgumentException - capacity が 1 未満の場合

ArrayBlockingQueue

public ArrayBlockingQueue(int capacity,
                          boolean fair,
                          Collection<? extends E> c)
指定された (固定) 容量と指定されたアクセスポリシーを持ち、指定されたコレクションの要素を初期状態で含む (要素はコレクションの反復子のトラバーサル順に追加) ArrayBlockingQueue を作成します。

パラメータ:
capacity - このキューの容量
fair - true の場合、挿入または削除でブロックされたスレッドに対するキューアクセスが FIFO の順序で処理される。false の場合、アクセス順は指定されない
c - 初期状態で含む要素のコレクション
例外:
IllegalArgumentException - capacityc.size() より小さいか、1 未満の場合
NullPointerException - 指定されたコレクションまたはそのいずれかの要素が null である場合
メソッドの詳細

add

public boolean add(E e)
キューの容量を超えずにすぐ実行できる場合は、指定された要素をこのキューの末尾に挿入します。成功した場合は true を返し、キューがいっぱいの場合は IllegalStateException をスローします。

定義:
インタフェース Collection<E> 内の add
定義:
インタフェース BlockingQueue<E> 内の add
定義:
インタフェース Queue<E> 内の add
オーバーライド:
クラス AbstractQueue<E> 内の add
パラメータ:
e - 追加する要素
戻り値:
true (Collection.add(E) で指定されているとおり)
例外:
IllegalStateException - キューがいっぱいの場合
NullPointerException - 指定された要素が null である場合

offer

public boolean offer(E e)
キューの容量を超えずに指定された要素をこのキューの末尾にすぐ挿入できる場合は、そうします。成功した場合は true を返し、キューがいっぱいの場合は false を返します。通常は、要素の挿入に失敗した場合に例外をスローするだけの add(E) メソッドよりもこのメソッドを使用することをお勧めします。

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

put

public void put(E e)
         throws InterruptedException
指定された要素をこのキューの末尾に挿入します。このキューがいっぱいの場合は、空きが生じるまで待機します。

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

offer

public boolean offer(E e,
                     long timeout,
                     TimeUnit unit)
              throws InterruptedException
指定された要素をこのキューの末尾に挿入します。このキューがいっぱいである場合は、指定された時間まで空きが生じるのを待機します。

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

poll

public E poll()
インタフェース Queue の記述:
キューの先頭を取得および削除します。キューが空の場合は null を返します。

定義:
インタフェース Queue<E> 内の poll
戻り値:
キューの先頭。キューが空の場合は null

take

public E take()
       throws InterruptedException
インタフェース BlockingQueue の記述:
このキューの先頭を取得して削除します。必要に応じて、要素が利用可能になるまで待機します。

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

poll

public E poll(long timeout,
              TimeUnit unit)
       throws InterruptedException
インタフェース BlockingQueue の記述:
このキューの先頭を取得して削除します。必要に応じて、指定された待機時間まで要素が利用可能になるのを待機します。

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

peek

public E peek()
インタフェース Queue の記述:
キューの先頭を取得しますが、削除しません。キューが空の場合は null を返します。

定義:
インタフェース Queue<E> 内の peek
戻り値:
キューの先頭。キューが空の場合は null

size

public int size()
キュー内にある要素の数を返します。

定義:
インタフェース Collection<E> 内の size
定義:
クラス AbstractCollection<E> 内の size
戻り値:
キューの要素数

remainingCapacity

public int remainingCapacity()
理想的な状態 (メモリーやリソースの制限がない状態) で、このキューがブロックせずに受け入れることができる追加要素の数を返します。このキューの初期容量から現在の size を引いた値と常に同じです。  

remainingCapacity を調べても要素の挿入試行が成功するかどうかがわかるとはかぎりません。これは別のスレッドが要素を挿入または削除しようとしている可能性があるためです。

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

remove

public boolean remove(Object o)
指定された要素の単一のインスタンスがこのキューに存在する場合は、キューから削除します。つまり、キュー内に、o.equals(e) に該当する要素 e が 1 つ以上含まれている場合は、そのような要素を削除します。指定された要素がこのキューに含まれていた場合、つまり、呼び出しの結果としてこのキューが変更された場合に true を返します。

定義:
インタフェース Collection<E> 内の remove
定義:
インタフェース BlockingQueue<E> 内の remove
オーバーライド:
クラス AbstractCollection<E> 内の remove
パラメータ:
o - キューから削除される要素 (その要素が存在する場合)
戻り値:
この呼び出しの結果、このキューが変更された場合は true

contains

public boolean contains(Object o)
指定された要素がキューに含まれている場合に true を返します。つまり、キューに、o.equals(e) となる要素 e が 1 つ以上含まれている場合にだけ true を返します。

定義:
インタフェース Collection<E> 内の contains
定義:
インタフェース BlockingQueue<E> 内の contains
オーバーライド:
クラス AbstractCollection<E> 内の contains
パラメータ:
o - このキューに含まれているかどうかを調べるオブジェクト
戻り値:
指定された要素がこのキューに含まれている場合は true

toArray

public Object[] toArray()
キュー内のすべての要素を適切な順序で含む配列を返します。  

返される配列への参照をこのキューが維持しないという点で、この配列は安全です。(つまり、このメソッドは新しい配列を割り当てる)。このため、呼び出し側は、返された配列を自由に変更できます。  

メソッドは、配列ベースの API とコレクションベースの API の間の橋渡し役として機能します。

定義:
インタフェース Collection<E> 内の toArray
オーバーライド:
クラス AbstractCollection<E> 内の toArray
戻り値:
キューのすべての要素が格納されている配列

toArray

public <T> T[] toArray(T[] a)
キュー内のすべての要素を適切な順序で含む配列を返します。返される配列の実行時の型は、指定された配列の型になります。キューが指定された配列に収まる場合は、その中に返されます。そうでない場合は、指定された配列の実行時の型とキューのサイズを持つ新しい配列が割り当てられます。  

キューが指定された配列に収まり、その配列にさらに余裕がある場合 (つまり、配列がキューより多くの要素を持つ場合)、その配列内でキューの終端よりあとの要素は null に設定されます。  

toArray() メソッドと同じように、このメソッドは、配列ベースの API とコレクションベースの API の間の橋渡し役として機能します。さらに、このメソッドでは、出力配列の実行時の型を正確に制御できるため、環境によっては割り当ての手間を抑えることができます。  

x が、文字列だけからなるキューであることがわかっていると仮定します。次のコードを使うと、新しく割り当てられた String の配列にキューをダンプできます。  

     String[] y = x.toArray(new String[0]);
toArray(new Object[0]) は、機能の点で toArray() と同一です。

定義:
インタフェース Collection<E> 内の toArray
オーバーライド:
クラス AbstractCollection<E> 内の toArray
パラメータ:
a - 配列が十分な大きさを持つ場合は、キューの要素が格納される配列。そうでない場合は、要素を格納するために同じ実行時の型の新しい配列が割り当てられる
戻り値:
キューのすべての要素が格納されている配列
例外:
ArrayStoreException - 指定された配列の実行時の型が、キュー内の各要素の実行時の型のスーパータイプでない場合
NullPointerException - 指定された配列が null である場合

toString

public String toString()
クラス AbstractCollection の記述:
このコレクションの文字列表現を返します。文字列表現は、コレクションの要素をその反復子が返した順に角括弧 ("[]") で囲んで示すリストです。隣接する要素は、文字 ", " (カンマと空白文字) によって区切られます。各要素は、String.valueOf(Object) を実行したかのように文字列に変換されます。

オーバーライド:
クラス AbstractCollection<E> 内の toString
戻り値:
このコレクションの文字列表現

clear

public void clear()
すべての要素をこのキューから原子的に削除します。この呼び出しが戻ると、キューは空になります。

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

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 - 指定されたコレクションがこのキューである場合、またはこのキューの要素のあるプロパティーが原因で指定されたコレクションに追加できない場合

iterator

public Iterator<E> iterator()
このキュー内の要素を適切な順序で繰り返し処理する反復子を返します。返される Iterator は「弱一貫性」を持つ反復子であり、ConcurrentModificationException をスローすることはなく、反復子の構築時に存在した要素をトラバースすることを保証します。また、構築後のすべての変更を反映します (ただし保証されてはいない)。

定義:
インタフェース Iterable<E> 内の iterator
定義:
インタフェース Collection<E> 内の iterator
定義:
クラス AbstractCollection<E> 内の iterator
戻り値:
キュー内の要素を適切な順序で繰り返し処理する反復子

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 も参照してください。