阻塞队列
ArrayBlockingQueue
LinkedBlockingQueue
SynchronousQueueproducer
// 如果队列满则阻塞
blockingQ.put(object);
阻于生产者-消费者模式。
consumer
for(;;) {
blockingQ.take(); // 如果队列空则阻塞
}
Queue<E>
add(E) : boolean
offer() : boolean
remove() : E
poll() : E
element() : E
peek() : E
使用BlockingQueue的时候,尽量不要使用从Queue继承下来的方法,否则就失去了Blocking的特性了。
BlockingQueue<E>
put(E)
take() : E
offer(E, long, TimeUnit) : boolean
poll(long, TimeUnit) : E
remainingCapacity()
drainTo(Collection<? super E>) : int
drainTo(Collection<? super E>, int) : int
在BlockingQueue中,要使用put和take,而非offer和poll。如果要使用offer和poll,也是要使用带等待时间参数的offer和poll。
使用drainTo批量获得其中的内容,能够减少锁的次数。