Java队列

阻塞队列

方法 表现
添加元素:
boolean add(E e); 成功返回true。
如果队列已满,抛异常IllegalStateException。
boolean offer(E e); 成功返回true。
失败返回false。
如果队列已满,直接返回false
void put(E e) throws InterruptedException; 如果队列已满,等待空间可用
boolean offer(E e, long timeout, TimeUnit unit)
throws InterruptedException;
成功返回true。
失败返回false。
如果队列已满,等待timeout时间返回结果。
移出队头
E remove(); 移除队列头部并将其返回。
如果队列为空,抛异常NoSuchElementException。
E poll(); 移除队列头部并将其返回。
如果队列为空,返回null
E take() throws InterruptedException; 移除队列头部并将其返回。
如果队列为空,等待直到有元素可移出
E poll(long timeout, TimeUnit unit) throws InterruptedException; 移除队列头部并将其返回。
如果队列为空,等待timeout时间返回结果。
取队头
E element(); 不移除队头,仅获取其值。
如果队列为空,抛异常NoSuchElementException。
E peek(); 不移除队头,仅获取其值。
如果队列为空,返回null
方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出
添加元素 add(e) offer(e) put(e) offer(e,time,unit)
移出队头 remove() poll() take() poll(time,unit)
取队头 element() peek() 不可用 不可用
ArrayBlockingQueue

一个用循环数组实现的有界阻塞队列。必须指定队列长度,按 FIFO(先进先出)原则对元素进行排序

LinkedBlockingQueue

一个用链表实现的有界阻塞队列。可不指定队列长度,默认为Integer.MAX_VALUE,按FIFO (先进先出) 排序元素
吞吐量通常要高于 ArrayBlockingQueue
Executors.newFixedThreadPool() 使用了这个队列

SynchronousQueue

不存储元素的阻塞队列
每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态
吞吐量通常要高于 LinkedBlockingQueue
Executors.newCachedThreadPool使用了这个队列

PriorityBlockingQueue

具有优先级的、无限阻塞队列

你可能感兴趣的:(Java队列)