阻塞队列是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。
1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。
2)支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列
常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线
程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。
系统内不阻塞队列:**PriorityQueue** 和 ConcurrentLinkedQueue
我们来看一下不阻塞队列的关系(以PriorityQueue 为例):
PriorityQueue 类继承自AbstractQueue,实现了Serializable接口。实质上维护了一个有序列表,
PriorityQueue位于Java util包中,观其名字前半部分的单词Priority是优先的意思,实际上这个队列就
是具有“优先级”。加入到 Queue 中的元素根据它们的天然排序(通过其 java.util.Comparable 实现)
或者根据传递给构造函数的 java.util.Comparator 实现来定位。
ConcurrentLinkedQueue 是基于链接节点的、线程安全的队列。并发访问不需要同步。因为它在
队列的尾部添加元素并从头部删除它们,所以不需要知道队列的大小, ConcurrentLinkedQueue 对公
共集合的共享访问就可以工作得很好。收集关于队列大小的信息会很慢,需要遍历队列;
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进
行排序,当我们添加一个元素的时候,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列
头部的元素。
实现阻塞接口的队列: