java基础之队列
来源:互联网 发布:淘宝打假新规则 编辑:程序博客网 时间:2024/06/08 08:57
Queue
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可 以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头 都是调用 remove() 或 poll() 所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。
如果可能,offer 方法可插入一个元素,否则返回 false。这与 Collection.add 方法不同,该方法只能通过抛出未经检查的异常使添加元素失败。offer 方法设计用于正常的失败情况,而不是出现异常的情况,例如在容量固定(有界)的队列中。
remove() 和 poll() 方法可移除和返回队列的头。到底从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。remove() 和 poll() 方法仅在队列为空时其行为有所不同:remove() 方法抛出一个异常,而 poll() 方法则返回 null。
element() 和 peek() 返回,但不移除,队列的头。
Queue 接口并未定义阻塞队列的方法,而这在并发编程中是很常见的。BlockingQueue 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。
Queue 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。
使用
class BlockingQ { private Object notEmpty = new Object(); private Queue<Object> linkedList = new LinkedList<Object>(); public Object take() throws InterruptedException { synchronized (notEmpty) { if (linkedList.size() == 0) { notEmpty.wait(); } return linkedList.poll(); } } public void offer(Object object) { synchronized (notEmpty) { if (linkedList.size() == 0) { notEmpty.notifyAll(); } linkedList.add(object); } }}
- java基础之队列
- 不惑JAVA之JAVA基础 - 阻塞队列
- java基础之自定义队列实现
- 基础数据结构之队列
- 数据结构基础之队列
- 数据结构基础之队列
- 算法基础之队列
- Java基础-Queue队列
- java基础之 LinkedList类实现 栈和队列
- Java基础学习之队列和泛型
- JAVA队列之优先队列
- JAVA队列之优先队列
- NuttX_基础组件之队列
- 数据结构之基础—队列
- 数据结构之队列基础练习
- java数据结构之队列
- Java 数据结构之队列
- java多线程之队列
- Java学习2
- 项目中Gson解析的上拉加载下拉刷新(HttpUtils)
- 48. Rotate Image ---leetcode算法笔记
- 4.php设计模式:状态模式的使用场景
- [Leetcode]225. Implement Stack using Queues
- java基础之队列
- 安卓获得状态栏高度
- osg中添加自定义事件UserEvent
- java 泛型笔记
- JConsole监控远程Tomcat服务器
- Matlab读取ply文件,polydata
- Linux系统命令总结
- Epoll详解及源码分析
- 山东省省外院校毕业生注册【山东省高校毕业生就业信息网】须知