Queue(队列)接口
表示Collection的子接口,表示队列FIFO(First In First Out)先进先出
常用方法:
抛出异常:
boolean add(E e) - 顺序添加一个元素(到达上限后,再添加则会抛出异常 )
E remove() - 获得第一个元素并移除(如果队列没有元素时,则抛出异常)
E element() - 获得第一个元素但不移除(如果队列没有元素时,则抛出异常)
返回特殊值:推荐使用
boolean offer(E e) - 顺序添加一个元素(到达上限后,再添加则会返回false)
E pool() - 获得第一个元素并移除(如果队列没有元素时,则返回null)
E peek() - 获得第一个元素但不移除(如果队列没有元素时,则返回null)
ConcurrentLinkedQueue
线程安全、可高效读写的队列,高并发下性能最好的队列。
无锁、CAS比较交换算法,修改的方法包含三个核心参数(V,E,N)
V:要更新的变量、 E:预期值、 N:新值
Queue<String> queue = new ConcurrentLinkedQueue<String>();
queue.offer("Hello"); //插入
queue.offer("World"); //插入
queue.poll(); //删除Hello
queue.peek(); //获得World
BlockingQueue接口(阻塞队列)
Queue的子接口,阻塞队列,增加了两个线程状态为无限期等待的方法。
方法:
void put(E e) - 将指定元素插入此队列中,如果没有可用空间,则等待。
E take() - 获取并移除此队列头部元素,如果没有可用元素,则等待。
ArrayBlockingQueue:
数组结构实现,有界队列
没写完,抽空给补上