java队列Queue及阻塞队列

java队列html

接口Queue类在java.util包,定义了如下6个方法java

详细查看官方文档https://docs.oracle.com/javase/7/docs/api/java/util/Queue.htmlapi

什么是阻塞队列 BlockingQueue数组

  队列是一种数据结构,它的特色是先进先出(First In First Out),它有两个基本操做:在队列尾部加入一个元素,从队列头部移除一个元素。队列在多线程应用中,经常使用于生产-消费场景。安全

  BlockingQueue 是 Java util.concurrent 包下重要的数据结构,BlockingQueue 提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,若是队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,若是队列已空,线程将会阻塞等待直到队列非空。并发包下不少高级同步类的实现都是基于 BlockingQueue 实现的。数据结构

  BlockingQueue 具备 4 组不一样的方法用于插入、移除以及对队列中的元素进行检查。若是请求的操做不能获得当即执行的话,每一个方法的表现也不一样。这些方法以下:多线程

  按照上图,咱们能够知道jdk1.5中的阻塞队列的操做:并发

  add        增长一个元索                     若是队列已满,则抛出一个IIIegaISlabEepeplian异常
  remove   移除并返回队列头部的元素    若是队列为空,则抛出一个NoSuchElementException异常
  element  返回队列头部的元素             若是队列为空,则抛出一个NoSuchElementException异常
  offer       添加一个元素并返回true       若是队列已满,则返回false
  poll         移除并返问队列头部的元素    若是队列为空,则返回null
  peek       返回队列头部的元素             若是队列为空,则返回null
  put         添加一个元素                      若是队列满,则阻塞
  take        移除并返回队列头部的元素     若是队列为空,则阻塞oracle

BlockingQueue 是个接口,你须要使用它的实现之一来使用 BlockingQueue,Java.util.concurrent 包下具备如下 BlockingQueue 接口的实现类:框架

ArrayBlockingQueue :一个由数组支持的有界队列。
LinkedBlockingQueue :一个由连接节点支持的可选有界队列。
PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列。
DelayQueue :一个由优先级堆支持的、基于时间的调度队列。
SynchronousQueue :一个利用 BlockingQueue 接口的简单汇集(rendezvous)机制。

  ArrayBlockingQueue:ArrayBlockingQueue 是一个有界的阻塞队列,其内部实现是将对象放到一个数组里。有界也就意味着,它不可以存储无限多数量的元素。它有一个同一时间可以存储元素数量的上限。你能够在对其初始化的时候设定这个上限,但以后就没法对这个上限进行修改了。

  DelayQueue:DelayQueue 对元素进行持有直到一个特定的延迟到期。注入其中的元素必须实现 java.util.concurrent.Delayed 接口。

  LinkedBlockingQueue:LinkedBlockingQueue 内部以一个链式结构对其元素进行存储。若是须要的话,这一链式结构能够选择一个上限。若是没有定义上限,将使用 Integer.MAX_VALUE 做为上限。

  PriorityBlockingQueue:PriorityBlockingQueue 是一个无界的并发队列。它使用了和类 java.util.PriorityQueue 同样的排序规则。你没法向这个队列中插入 null 值。全部插入到 PriorityBlockingQueue 的元素必须实现 java.lang.Comparable 接口。所以该队列中元素的排序就取决于你本身的 Comparable 实现。

  SynchronousQueue:SynchronousQueue 是一个特殊的队列,它的内部同时只可以容纳单个元素。若是该队列已有一元素的话,试图向队列中插入一个新元素的线程将会阻塞,直到另外一个线程将该元素从队列中抽走。一样,若是该队列为空,试图向队列中抽取一个元素的线程将会阻塞,直到另外一个线程向队列中插入了一条新的元素。据此,把这个类称做一个队列显然是夸大其词了。它更多像是一个汇合点。

 

而后能够联系到java集合 list,set

java框架集合图https://img-blog.csdn.net/20160124221843905

相关文章
相关标签/搜索