|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
E - コレクション内に存在する要素の型public interface BlockingQueue<E>
要素の取得時にキューが空でなくなるまで待機したり、要素の格納時にキュー内の空間が利用可能になるまで待機する操作を追加サポートする Queue。
BlockingQueue は、null 要素を受け入れません。null の add、put、または offer が試みられると、実装により NullPointerException がスローされます。poll 操作が失敗したことを示す標識値として、null が使用されます。
BlockingQueue は、容量が制限される場合があります。これがいずれかの時点で remainingCapacity を超過すると、ブロックなしで追加要素を put できなくなります。組み込み容量制限なしで BlockingQueue を使用すると、Integer.MAX_VALUE の残りの容量が常にレポートされます。
BlockingQuere の実装は、主にプロデューサとコンシューマの間のキューで使用するように設計されていますが、Collection インタフェースも追加的にサポートします。したがって、たとえば remove (x) を使用してキューから要素を任意に削除することが可能です。しかし、このような操作は一般に実行の効率が悪いので、キュー内のメッセージの取り消しなど特定の用途がある場合にのみ実行されます。
BlockingQueue の実装はスレッドセーフです。すべてのキューイングメソッドは、内部ロックまたは他の並列的な制御形式を使用して効果を不可分に達成します。しかし、コレクション操作を「一括」する addAll、containsAll、retainAll および removeAll は、実装時に他の指定がされていないかぎり、不可分に実行する必要は必ずしもありません。したがって、たとえば、addAll (c) では c に他の要素の一部だけを追加した後に、例外をスローして失敗する可能性があります。
BlockingQueue は、本来、項目がこれ以上追加されないことを示す「クローズ」または「シャットダウン」操作を、いかなる種類であれサポートしません。この種の機能のニーズや使用は、実装に依存する傾向があります。たとえば、プロデューサで特殊な end-of-stream または poison オブジェクトを挿入し、コンシューマによる取得時にこれらが適宜解釈される、という方法が一般的です。
次に、通常のプロデューサ - コンシューマシナリオに基づく使用例を示します。BlockingQueue は複数のプロデューサおよび複数のコンシューマで安全に使用できることに注意してください。
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
}
class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
このインタフェースは、Java Collections Framework のメンバです。
| メソッドの概要 | |
|---|---|
boolean |
add(E o)
このキューに指定された要素を追加します。 |
int |
drainTo(Collection<? super E> c)
利用可能なすべての要素をこのキューから削除して、指定されたコレクションに追加します。 |
int |
drainTo(Collection<? super E> c,
int maxElements)
指定された数以内の利用可能な要素をこのキューから削除して、指定されたコレクションに追加します。 |
boolean |
offer(E o)
可能な場合、指定された要素をこのキューに挿入します。 |
boolean |
offer(E o,
long timeout,
TimeUnit unit)
指定された要素をこのキューに挿入します。 |
E |
poll(long timeout,
TimeUnit unit)
このキューの先頭を取得および削除します。 |
void |
put(E o)
指定された要素をこのキューに追加します。 |
int |
remainingCapacity()
このキューが、理想的な状態 (メモリやリソースの制限が存在しない) でブロッキングなしに受け入れることができる要素の数を返します。 |
E |
take()
このキューの先頭を取得および削除します。 |
| インタフェース java.util.Queue から継承されたメソッド |
|---|
element, peek, poll, remove |
| インタフェース java.util.Collection から継承されたメソッド |
|---|
addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray |
| メソッドの詳細 |
|---|
boolean offer(E o)
Collection.add(E) メソッドよりも offer メソッドを使用することをお勧めします。
Queue<E> 内の offero - 追加する要素
NullPointerException - 指定された要素が null である場合
boolean offer(E o,
long timeout,
TimeUnit unit)
throws InterruptedException
o - 追加する要素timeout - 処理を中止するまでの待機時間。単位は unitunit - timeout パラメータの解釈方法を指定する TimeUnit
InterruptedException - 待機中に割り込みが発生した場合
NullPointerException - 指定された要素が null である場合
E poll(long timeout,
TimeUnit unit)
throws InterruptedException
timeout - 処理を中止するまでの待機時間。単位は unitunit - timeout パラメータの解釈方法を指定する TimeUnit
InterruptedException - 待機中に割り込みが発生した場合
E take()
throws InterruptedException
InterruptedException - 待機中に割り込みが発生した場合
void put(E o)
throws InterruptedException
o - 追加する要素
InterruptedException - 待機中に割り込みが発生した場合
NullPointerException - 指定された要素が null である場合int remainingCapacity()
remainingCapacity を確認すると、要素の add 操作がいつも成功するわけではないことがわかります。これは、別のスレッドが要素の put または take 操作を実行しようとしている場合があるためです。
boolean add(E o)
Collection<E> 内の addo - 要素
NullPointerException - 指定された要素が null である場合
IllegalStateException - 要素を追加できない場合int drainTo(Collection<? super E> c)
c - 要素の転送先のコレクション
NullPointerException - c が null の場合
IllegalArgumentException - c がこのキューである場合
int drainTo(Collection<? super E> c,
int maxElements)
c - 要素の転送先のコレクションmaxElements - 転送する要素の最大数
NullPointerException - c が null の場合
IllegalArgumentException - c がこのキューである場合
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。