SynchronousQueue
(取自另一个问题)
SynchronousQueue
是更多的交接,而LinkedBlockingQueue
正义只允许一个元素。区别在于,put()
对a 的调用SynchronousQueue
将在有相应的take()
调用之前不会返回,但是LinkedBlockingQueue
大小为1的put()
调用(对空队列)将立即返回。实际上,它是BlockingQueue
当您不需要队列(您不想维护任何待处理数据)时的实现。
LinkedBlockingQueue
(LinkedList
实现但并非完全是LinkedList
它的JDK实现使用静态内部类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();
}
之间IMHO最大的区别ArrayBlockingQueue
并且LinkedBlockingQueue
是从一个构造已清楚底层数据结构阵列和其他链表。
ArrayBlockingQueue
使用单锁双重条件算法,并且LinkedBlockingQueue
是“两个锁队列”算法的变体,它具有2个锁2个条件(takeLock,putLock)