如图1所示,按不同分类方式可以进行基本的3种分类方式。 (1)如果一个队列已满,此时要插入元素 OR 一个队列已空,此时要提取元素 出现如上情况时,如果阻塞称为阻塞队列(名字中含有Blocking Queue字样,例如ArrayBQ、LinkedBQ、PriorityBQ等,如图2所示),在出现上面情况时会暂时阻塞,直到队列元素不满时再插入(或队列元素不空时再提取);若不阻塞称为非阻塞队列,遇到上面情况时会直接报错; (2)有界队列和无界队列很好理解,也即是否设置了固定大小。当然实际上无界队列默认最大长度为Integer.MAX_VALUE (3)按功能分类: (3-1)普通队列(基本先入先出队列,可用固定长度数组或链表实现) (3-2)双端队列(可以在头部和尾部同时入队或出队) (3-3)优先队列(二叉堆实现,优先级高的元素先出队) (3-4)延迟队列(基于优先队列实现,入队的元素需入队一定时间才能出队,如图3所示) (3-5)特殊队列(例如SynchronousQueue,每次添加数据后必须等待另一个线程拿走数据之后,才可以继续添加数据)
点赞 评论

相关推荐

牛客网
牛客企业服务