阻塞队列
阻塞队列(P668-673)
java.util.concurrent包提供了阻塞队列的几个变种。
LinkedBlockingQueue的容量是没有上边界的,但是,也可以选择指定最大容量。
LinkedBlockingDeque是一个双端的版本。ArrayBlockingQueue在构造时需要指定容量,并且有一个可选的参数来指定是否需要公平性。
PriorityBlockingQueue是一个带优先级的队列,而不是先进先出队列。元素按照它们的优先级顺序被移出。该队列是没有容量上限的。
阻塞队列方法
方法 | 正常动作 | 特殊情况下的动作 |
add | 添加一个元素 | 如果队列满,则抛出IllegalStateException异常 |
element | 返回队列的头元素 | 如果队列空,抛出NoSuchElementException异常 |
offer | 添加一个元素并返回true | 如果队列满,返回false |
peek | 返回队列的头元素 | 如果队列空,则返回null |
poll | 移出并返回队列的头元素 | 如果队列空,则返回null |
put | 添加一个元素 | 如果队列满,则阻塞 |
remove | 移出并返回头元素 | 如果队列空,则抛出NoSuchElementException异常 |
take | 移出并返回头元素 | 如果队列空,则阻塞 |
java.util.concurrent.ArrayBlockingQueue 5.0
ArrayBlockingQueue(int capacity)
ArrayBlockingQueue(int capacity, boolean fair)
构造一个带有指定的容量和公平性设置的阻塞队列。该队列用循环数组实现。
java.util.concurrent.LinkedBlockingQueue 5.0
LinkedBlockingQueue()
构造一个无上限的阻塞队列,用链表实现
LinkedBlockingQueue(int capacity)
根据指定容量构造一个有限的阻塞队列,用链表实现
java.util.concurrent.LinkedBlockingDeque 6
LinkedBlockingDeque()
构造一个无上限的阻塞双向队列,用链表实现
LinkedBlockingDeque(int capacity)
根据指定容量构造一个有限的阻塞双向队列,用链表实现
java.util.concurrent.DelayQueue 5.0
DelayQueue()
构造一个包含Delayed元素的无界的阻塞时间有限的阻塞队列。只有那些延迟已经超过时间的元素可以从队列移出。
java.util.concurrent.Delayed 5.0
long getDelay(TimeUnit unit)
得到该对象的延迟,用给定的时间单位进行度量
java.util.concurrent.PriorityBlockingQueue 5.0
PriorityBlockingQueue()
PriorityBlockingQueue(int initialCapacity)
PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
构造一个无边界阻塞优先队列,用堆实现
initialCapacity:优先队列的初始容量。默认值是11。
comparator:用来对元素进行的比较器,如果没有指定,则元素必须实现Comparable接口。
java.util.concurrent.TransferQueue 7
void transfer(E element)
boolean tryTransfer(E element, long time , TimeUnit unit)
传输一个值,或者尝试在给定的超时时间内传输这个值,这个调用将阻塞,直到另一个线程将元素删除。第二个方法会在调用成功时返回true。
Last updated