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)