モジュール java.base
パッケージ java.util.concurrent

クラスConcurrentLinkedQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.ConcurrentLinkedQueue<E>
型パラメータ:
E - このキューに保持されている要素の型
すべての実装されたインタフェース:
Serializable, Iterable<E>, Collection<E>, Queue<E>

public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> implements Queue<E>, Serializable
リンク・ノードに基づく、制限なしのスレッドセーフなキューです。 このキューはFIFO (先入れ先出し)で要素を順序付けします。 このキューの先頭は、キューに入っていた時間がもっとも長い要素です。 このキューの末尾は、キューに入っていた時間がもっとも短い要素です。 新しい要素はキューの末尾に挿入され、キュー取得オペレーションにより、キューの先頭の要素が取得されます。 共通のコレクションへのアクセスを多数のスレッドが共有する場合、ConcurrentLinkedQueueは選択肢として適切です。 大半のコレクション実装と同様、このクラスはnull要素の使用を許容しません。

この実装では、効率のよい非ブロックのアルゴリズムが使用されます。このアルゴリズムは次の資料で記述されているものに基づきます: 「Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms」Maged M. Michael、Michael L. Scott

イテレータは弱一貫性を持ち、ある時点での、またはイテレータの作成以降のキューの状態を反映する要素を返します。 これらはConcurrentModificationExceptionをスローせず、ほかのオペレーションとの並行処理が可能です。 イテレータの作成以降にキューに含まれた要素が1回だけ返されます。

大半のコレクションとは異なり、sizeメソッドは一定時間のオペレーションではないことに留意してください。 これらのキューには非同期という特性があるため、現在の要素数を判定するには要素全体をトラバースする必要があります。したがって、このコレクションがトラバーサル中に変更された場合、不正確な結果が報告されることがあります。

addAll(java.util.Collection<? extends E>)removeIf(java.util.function.Predicate<? super E>)forEach(java.util.function.Consumer<? super E>)など、複数の要素を追加、削除または検査するバルク操作は、原子的に実行される保証はありません。 たとえば、 addAll操作と並行するforEachトラバースでは、追加された要素の一部のみが監視される場合があります。

このクラスとそのイテレータは、QueueおよびIteratorインタフェースのオプション・メソッドすべてを実装します。

メモリー整合性効果: ほかの並行処理コレクションと同様、オブジェクトをConcurrentLinkedQueueに配置する前のスレッド内のアクションは、別のスレッドでのその要素へのアクセスまたはConcurrentLinkedQueueからの削除に続くアクションよりも前に発生します。

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

導入されたバージョン:
1.5
関連項目: