首页 > 其他 > 详细

Queue & BlockingQueue

时间:2020-08-23 20:39:57      阅读:89      评论:0      收藏:0      [点我收藏+]

Queue(队列)

java.util.Queue
Queue 提供了入队、出队、获取队列头的方法。

这些方法分两类:
一类是在操作失败时抛出异常;
另一类是在操作失败时返回一个特殊的值(null或false)。
操作失败的情况都与队列的临界条件有关:队列满或者队列空。队列满的时候入队会失败,队列空的时候出队会失败。

队列通常以FIFO(先进先出)的方式对元素排序。
(但不一定都是FIFO,比如:PriorityQueue)

队列实现通常不允许插入null元素,因为poll方法将null用作特殊的返回值,以指示队列不包含任何元素。

Queue 接口没有定义那些在并发编程中很常见的阻塞队列方法(比如:等待队列非空或者等待队列空间可用)。这些方法是在 java.util.concurrent.BlockingQueue 接口中定义的,它扩展了 Queue 接口。

java.util.Queue#add(E e)
增加一个元素。如果队列已满,则抛出 IllegalStateException

java.util.Queue#offer(E e)
添加一个元素并返回 true。如果队列已满,则返回false

java.util.Queue#remove()
移除并返回队列头部的元素。如果队列为空,则抛出 NoSuchElementException

java.util.Queue#poll()
移除并返问队列头部的元素。如果队列为空,则返回 null

java.util.Queue#element()
返回队列头部的元素。如果队列为空,则抛出 NoSuchElementException

java.util.Queue#peek()
返回队列头部的元素。如果队列为空,则返回 null。(peek 是窥视、偷看的意思)

 

技术分享图片

 BlockingQueue(阻塞队列)

java.util.concurrent.BlockingQueue
BlockingQueue 继承了 Queue 接口,它在 Queue 的基础上,额外支持了操作失败(当队列为空或者队列空间满了)时的阻塞操作
也就是说,当列表为空时,BlockingQueue 支持阻塞获取队列头部元素,直到队列变为非空;
当列表空间满了时候,BlockingQueue 支持阻塞添加元素,直到队列空间变为可用。

BlockingQueue 支持的阻塞操作分了两类:一种是无限期的阻塞;另一种是给定时间的阻塞。

java.util.concurrent.BlockingQueue#put(E e)
添加一个元素。如果队列满,则阻塞

java.util.concurrent.BlockingQueue#offer(E e, long timeout, TimeUnit unit)
添加一个元素。如果队列满,则阻塞指定的时间

java.util.concurrent.BlockingQueue#take()
移除并返回队列头部的元素。如果队列为空,则阻塞

java.util.concurrent.BlockingQueue#poll(long timeout, TimeUnit unit)
移除并返回队列头部的元素。如果队列为空,则阻塞指定的时间

 

技术分享图片

 

Queue & BlockingQueue

原文:https://www.cnblogs.com/kevin-yuan/p/13549948.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!