JavaTM 2 Platform
Standard Ed. 5.0

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 操作がブロックされます。空のキューから要素を取得しようとしても、同様のブロッキングが発生します。

このクラスは、待機中のプロデューサおよびコンシューマスレッドの順序付けを決定するオプションの均等性ポリシーをサポートします。デフォルトでは、この順序付けは保証されていません。ただし、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 を作成します。
 
メソッドの概要
 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 o)
          可能であれば、このキューの末尾に指定された要素を挿入します。
 boolean offer(E o, long timeout, TimeUnit unit)
          指定された要素をこのキューの末尾に挿入します。
 E peek()
          キューの先頭を取得しますが、削除しません。
 E poll()
          キューの先頭を取得および削除します。
 E poll(long timeout, TimeUnit unit)
          このキューの先頭を取得および削除します。
 void put(E o)
          指定された要素をこのキューの末尾に追加します。
 int remainingCapacity()
          このキューが理想的な状態にある (メモリやリソースの制限が存在しない) 場合に、ブロッキングなしで受け入れる要素の数を返します。
 boolean remove(Object o)
          指定された要素の単一のインスタンスがある場合は、キューから削除します。
 int size()
          キュー内にある要素の数を返します。
 E take()
          このキューの先頭を取得および削除します。
 Object[] toArray()
          このコレクションの要素がすべて格納されている配列を返します。
<T> T[]
toArray(T[] a)
          このコレクション内のすべての要素を保持する配列を返します。
 String toString()
          このコレクションの文字列表現を返します。
 
クラス java.util.AbstractQueue から継承されたメソッド
add, 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.concurrent.BlockingQueue から継承されたメソッド
add
 
インタフェース 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 - c またはその内部要素のいずれかが null の場合
メソッドの詳細

offer

public boolean offer(E o)
可能であれば、このキューの末尾に指定された要素を挿入します。このキューがいっぱいである場合には、即座に返します。

定義:
インタフェース BlockingQueue<E> 内の offer
定義:
インタフェース Queue<E> 内の offer
パラメータ:
o - 追加する要素
戻り値:
要素をこのキューに追加可能な場合は true、そうでない場合は false
例外:
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 である場合

poll

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

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

poll

public E poll(long timeout,
              TimeUnit unit)
       throws InterruptedException
インタフェース BlockingQueue の記述:
このキューの先頭を取得および削除します。このキューに要素が存在しない場合は、必要に応じて指定された時間だけ待機します。

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

remove

public boolean remove(Object o)
指定された要素の単一のインスタンスがある場合は、キューから削除します。

定義:
インタフェース Collection<E> 内の remove
オーバーライド:
クラス AbstractCollection<E> 内の remove
パラメータ:
o - コレクションから削除される要素 (その要素がある場合)
戻り値:
コレクションに指定された要素がある場合は true

peek

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

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

take

public E take()
       throws InterruptedException
インタフェース BlockingQueue の記述:
このキューの先頭を取得および削除します。このキューに要素が存在しない場合は待機します。

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

put

public void put(E o)
         throws InterruptedException
指定された要素をこのキューの末尾に追加します。必要に応じ、空間が利用可能になるまで待機します。

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

size

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

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

remainingCapacity

public int remainingCapacity()
このキューが理想的な状態にある (メモリやリソースの制限が存在しない) 場合に、ブロッキングなしで受け入れる要素の数を返します。この値は常にこのキューの初期容量に等しく、このキューの現在の size 値よりも小さくなります。

remainingCapacity を確認すれば、要素の add 操作が成功するとは必ずしも言えません。これは、待機中のコンシューマが、他の操作を実行するといっぱいになってしまうキューに対して、要素の take 操作を実行する準備ができている場合があるためです。

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

contains

public boolean contains(Object o)
クラス AbstractCollection の記述:
コレクションに指定された要素がある場合に true を返します。すなわち、このコレクションに (o==null ? e==null : o.equals(e)) である要素 e が 1 つ以上ある場合にだけ true を返します。

この実装はコレクションの各要素について、指定された要素と等しいかどうかを順に繰り返し確認します。

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

toArray

public Object[] toArray()
クラス AbstractCollection の記述:
このコレクションの要素がすべて格納されている配列を返します。反復子によって返される要素の順番をコレクションが保証する場合、このメソッドはそれと同じ順番で要素を返します。返される配列は、コレクションによって管理される参照関係を持たない点で安全性が保証されます。つまり、このメソッドは、コレクションの基が Array である場合でも、新しく配列を割り当てます。このため、呼び出し側は、返された配列を自由に変更できます。

この実装は、返される配列を割り当て、コレクションの各要素について繰り返します。つまり、各オブジェクト参照を配列の次の要素に格納するという処理を、第 0 要素から開始します。

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

toArray

public <T> T[] toArray(T[] a)
クラス AbstractCollection の記述:
このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。コレクションが指定された配列に収まる場合は、その中に返されます。そうでない場合は、指定された配列の実行時の型とコレクションのサイズを持つ新しい配列が割り当てられます。

指定された配列にコレクションが収まり、さらに空きがある場合、すなわち配列にコレクション以上の要素数がある場合には、コレクションの終端の直後にある配列の要素が null に設定されます。コレクションに null 要素がないことが呼び出し側でわかっている場合には、これにより、コレクションの長さを判定できます。

反復子によって要素が返される順序をコレクションが保証する場合、このメソッドは同じ順序で要素を返さなければなりません。

この実装は、配列がコレクションの格納に十分な大きさであるかを確認します。不十分な場合、この実装はリフレクションを使って、適切なサイズおよび型の配列を新しく割り当てます。次に、コレクションに対して、0 から順に配列の連続する要素へ各オブジェクト参照を格納する操作を反復します。配列がコレクションよりも大きい場合、コレクションの終端より後の最初の位置に null が格納されます。

定義:
インタフェース Collection<E> 内の toArray
オーバーライド:
クラス AbstractCollection<E> 内の toArray
パラメータ:
a - コレクションの要素の格納先の配列。配列のサイズが十分でない場合は、同じ実行時の型で新しい配列が格納用として割り当てられる
戻り値:
コレクションの要素を含む配列

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 に要素の add 操作を試みる際に障害が発生した場合、関連する例外のスロー時に要素がコレクションのいずれにも存在しないか、一方または両方に存在する可能性があります。キューを自分自身に排出することを試みると、IllegalArgumentException がスローされます。また、この操作の進行中に指定されたコレクションが変更された場合の動作は、定義されていません。

定義:
インタフェース BlockingQueue<E> 内の drainTo
パラメータ:
c - 要素の転送先のコレクション
戻り値:
転送される要素の数

drainTo

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

定義:
インタフェース BlockingQueue<E> 内の drainTo
パラメータ:
c - 要素の転送先のコレクション
maxElements - 転送する要素の最大数
戻り値:
転送される要素の数

iterator

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

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

JavaTM 2 Platform
Standard Ed. 5.0

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

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