基于数组实现的有边界的阻塞队列,阻塞是利于
ReetrantLock+Condition来实现的。
take() :取出一个元素,若队列为空则阻塞put() :添加一个元素,若队列满的则阻塞peek()/poll() :前者为查看队尾元素,若队列为空则返回null, 后者为查看并移除队尾元素,若队列为空则抛NoSuchElementExecpptionelement()/remove() :前者为peek()扩充,且返回值为空抛出异常 , 后者类似add() / offer() :都为添加,相比put()阻塞,前者超过长度会抛出IllegalStateExeception,后者则会返回false
无边界且会按照传入或者默认顺序排序的优先阻塞队列,底层为数组实现。会自动扩容
take() :会阻塞
基于单链表实现的阻塞队列,可选边界
同步阻塞队列,不储存元素,通过
Trahsfer来确保数据一定有消费。
put() :会阻塞直到有消费者取出元素take() :会阻塞知道有生产者生产元素
双向链表实现的阻塞队列 ,多了一些
addFirst(),removeLast(),takeFirst()
有过期时间的阻塞队列,其中元素必须实现
Delayed接口。会根据其中的getDelay()方法判断是否过期,以及通过compareTo()方法来对过期时间长短进行排序
-
take() :若队列中没有过期元素那么会阻塞。 -
poll() / peek() :后者会直接获取队尾元素,前者会调用peek()方法查看是否为null且是否过期,若没过期则返回null -
iterator() :遍历可以直接快速返回
基于链表的无界阻塞队列,并且在生产消费的同时支持保证生产时一定消费,消费时一定有生产。
transfer() / take():方法分别在没有消费者/生产者线程的时候阻塞