SynchronousQueue
(別から撮影 質問)
SynchronousQueue
はLinkedBlockingQueue
単なるハンドオフですが、は単一の要素を許可します。差があることput()
への呼び出しがSynchronousQueue
対応があるまで戻らないtake()
コールが、しかしとLinkedBlockingQueue
サイズ1の、put()
(空のキューに)呼び出しは直ちに戻ります。これは基本的に、BlockingQueue
本当にキューが必要ない場合(保留中のデータを保持したくない場合)の実装です。
LinkedBlockingQueue
(LinkedList
実装ですが、厳密にはJDK実装でLinkedList
は、要素間のリンクを維持するために静的内部クラスNodeを使用しています)
LinkedBlockingQueueのコンストラクタ
public LinkedBlockingQueue(int capacity)
{
if (capacity < = 0) throw new IllegalArgumentException();
this.capacity = capacity;
last = head = new Node< E >(null); // Maintains a underlying linkedlist. ( Use when size is not known )
}
リンクの維持に使用されるノードクラス
static class Node<E> {
E item;
Node<E> next;
Node(E x) { item = x; }
}
3。ArrayBlockingQueue(配列の実装)
ArrayBlockingQueueのコンストラクタ
public ArrayBlockingQueue(int capacity, boolean fair)
{
if (capacity < = 0)
throw new IllegalArgumentException();
this.items = new Object[capacity]; // Maintains a underlying array
lock = new ReentrantLock(fair);
notEmpty = lock.newCondition();
notFull = lock.newCondition();
}
間私見最大差ArrayBlockingQueue
とは、LinkedBlockingQueue
一つたコンストラクタから明らかなデータ構造配列と他のLinkedListの基礎となります。
ArrayBlockingQueue
シングルロックダブル条件アルゴリズムを使用しLinkedBlockingQueue
、「2ロックキュー」アルゴリズムのバリアントであり、2つのロックがあり、2つの条件(takeLock、putLock)