E - コレクション内に存在する要素の型public class ArrayBlockingQueueEx<E> extends ArrayBlockingQueue<E> implements NotificationBlockingQueue<E>
ArrayBlockingQueue.peek()と AbstractCollection.isEmpty()に、 キューが空であれば、キューに要素が入るか、キューイング終了フラグが上がるまで 待つ機能をつけている。
ArrayBlockingQueue内の、ブロック制御を行っているConditionフィールドは サブクラスに公開されていないため、 このクラスではArrayBlockingQueueと冗長な実装をしている。
実装はAbstractCollectorに使用されるものに絞っているため、 すべてのメソッドが使用できるわけではない。
このクラスでオーバーライドしているメソッド以外で、 キューの状態を変更するメソッドや、待ちが発生するメソッドを実行してはならない。
キューに要素を詰め終わった後は、キューに要素を詰めるスレッドで、必ずfinishQueueingメソッドを実行すること。
| 修飾子とタイプ | フィールドと説明 |
|---|---|
protected int |
capacity
キューサイズ。
|
protected boolean |
finishQueueingFlag
キューイング終了フラグ。
|
protected Condition |
notEmpty
キューが空でなくなったときに送信されるシグナル。
|
protected Condition |
notFull
キューがFullでなくなったときに送信されるシグナル。
|
protected ReentrantLock |
queueLock
キューの操作を同期化するロック。
|
| コンストラクタと説明 |
|---|
ArrayBlockingQueueEx(int capacity)
指定された (固定) 容量およびデフォルトのアクセスポリシーを使用して、ArrayBlockingQueue を作成する。
|
ArrayBlockingQueueEx(int capacity,
boolean fair)
指定された (固定) 容量および指定されたアクセスポリシーを使用して、ArrayBlockingQueue を作成する。
|
| 修飾子とタイプ | メソッドと説明 |
|---|---|
void |
finishQueueing()
キューイングの終了を通知する。
|
boolean |
isEmpty()
キューに要素がない場合に true を返す。
|
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)
指定された要素をこのキューの末尾に追加する。
|
add, clear, contains, drainTo, drainTo, iterator, remainingCapacity, remove, size, take, toArray, toArray, toStringaddAll, element, removecontainsAll, removeAll, retainAllclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitadd, contains, drainTo, drainTo, remainingCapacity, remove, takeprotected final ReentrantLock queueLock
protected final Condition notEmpty
protected final Condition notFull
protected final int capacity
protected volatile boolean finishQueueingFlag
public ArrayBlockingQueueEx(int capacity,
boolean fair)
capacity - キューの容量fair - true の場合、挿入または削除時にブロックされたスレッドに対するキューアクセスは、FIFO の順序で処理される。 false の場合、アクセス順序は指定されない。ArrayBlockingQueue.ArrayBlockingQueue(int, boolean)public ArrayBlockingQueueEx(int capacity)
capacity - キューの容量ArrayBlockingQueue.ArrayBlockingQueue(int)public void finishQueueing()
キューに要素が入るのを待っているスレッドがいる場合、そのブロックを解除する。 キューに要素を詰めるスレッドは、キューイングが完了したあとで、必ずこのメソッドを実行すること。
finishQueueing インタフェース内 NotificationBlockingQueue<E>public boolean offer(E o, long timeout, TimeUnit unit) throws InterruptedException
このメソッドの定義は、ArrayBlockingQueue.offer(Object, long, TimeUnit)と同じ。
offer インタフェース内 BlockingQueue<E>offer クラス内 ArrayBlockingQueue<E>o - 追加する要素timeout - 処理を中止するまでの待機時間。単位は unitunit - timeout パラメータの解釈方法を指定する TimeUnitInterruptedException - 待機中に割り込みが発生した場合NullPointerException - 指定された要素が null である場合ArrayBlockingQueue.offer(Object, long, TimeUnit)public boolean offer(E o)
このメソッドの定義は、ArrayBlockingQueue.offer(Object)と同じ。
offer インタフェース内 BlockingQueue<E>offer インタフェース内 Queue<E>offer クラス内 ArrayBlockingQueue<E>o - 追加する要素NullPointerException - 指定された要素が null である場合ArrayBlockingQueue.offer(Object)public void put(E o) throws InterruptedException
put インタフェース内 BlockingQueue<E>put クラス内 ArrayBlockingQueue<E>o - 追加する要素InterruptedException - 待機中に割り込みが発生した場合NullPointerException - 指定された要素が null である場合public E peek()
拡張仕様: キューが空の場合は、キューに要素が入るか、キューイングの終了が通知されるまで待つ。
キューイングの終了が通知された後、キューが空の場合は null を返す。
キューに要素がある場合や、キューイングの終了が通知された後の仕様は、 ArrayBlockingQueue.peek()と同じ。
public E poll(long timeout, TimeUnit unit) throws InterruptedException
拡張仕様: キューイングの終了が通知された後、キューが空の場合は、タイムアウトを待たずに null を返す。
キューイングの終了が通知される前の仕様は、 ArrayBlockingQueue.poll(long, TimeUnit)と同じ。
poll インタフェース内 BlockingQueue<E>poll クラス内 ArrayBlockingQueue<E>timeout - 処理を中止するまでの待機時間。単位は unitunit - timeout パラメータの解釈方法を指定する TimeUnitInterruptedException - 待機中に割り込みが発生した場合public E poll()
public boolean isEmpty()
拡張仕様: キューが空の場合は、キューに要素が入るか、キューイングの終了が通知されるまで待つ。
キューイングの終了が通知された後、キューが空の場合は true を返す。
isEmpty インタフェース内 Collection<E>isEmpty クラス内 AbstractCollection<E>Copyright © 2014 NTT DATA Corporation.