本文主要是介绍阻塞队列BlockingQueue(JDK8),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- BlockingQueue(阻塞队列)是JDK5新增的线程安全的高效队列类,基于生产者-消费者模式。队列为空时,获取元素的操作等待队列变为非空;队列已满时插入操作等待队列空间可用。
- BlockingQueue不接受null元素,会throw NullPointerException,null用于标记poll操作的失败。
- BlockingQueue默认容量大小为Integer.MAX_VALUE,支持自定义容量大小。类似于Collection接口,支持remove(x),然而由于性能问题并不推荐大量使用。drainTo(c)比重复poll更高效。
- BlockingQueue本质上不提供close、shutdown操作用来标记“不再有元素继续被添加”,开发者可自行定义特殊元素来表示“不再有元素继续被添加”。
- 本文地址:http://blog.csdn.net/u010887744/article/details/70195270
方法 | 操作成功 | 一直阻塞直到处理成功 | 失败返回特殊值 | 失败抛异常 | |
插入 | add(e) | true | 队列已满则IllegalStateException: Queue full | ||
offer(e) | true | 队列已满:false | |||
put(e) | void | 一直阻塞直到插入成功 | |||
offer e,timeout, unit) | true | 插入超时:false | |||
addAll(c) | true | 部分插入异常返回false | 队列已满则IllegalStateException: Queue full | ||
移除/获取 | remove() | 返回被移除的元素 | 队列为空:抛出NoSuchElementException | ||
remove(e) | true | 不存在该元素:false | |||
removeAll(c) | 迭代remove(e),队列因此请求而改变则返回true | false | |||
poll() | 队列头 | 队列为空返回null而不是抛异常 |
这篇关于阻塞队列BlockingQueue(JDK8)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!