阻塞队列中比较特殊的几个队列
DelayQueue
按时间进行任务调度。本质上是一个PriorityQueue实现的。
SynchronusQueue
用来给另外一个线程下达任务的。一定是另外一个线程需要,如果不需要直接在本线程装是不行的。直接拿在手里,什么时候另一个线程来了,就递给它。相当于两个线程交换数据。
TransferQueue
它最牛逼的一个地方在于它有一个方法transfer();它和put的区别:一个线程来了,装完了队列就走了,如果是transfer,装完就在这阻塞等着,等有人将它取走,才继续干自己的事情。
public interface TransferQueue<E> extends BlockingQueue<E> {
boolean tryTransfer(E e);
void transfer(E e) throws InterruptedException;
boolean tryTransfer(E e, long timeout, TimeUnit unit)
throws InterruptedException;
boolean hasWaitingConsumer();
int getWaitingConsumerCount();
}