java中的各种并发Queue可以归为以下的几种: 

  • ConcurrentLinkedQueue: 一个由链表结构组成的非阻塞队列
  • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列
  • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列
  • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列
  • SynchronousQueue:一个不存储元素的阻塞队列
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列
  • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列

  ConcurrentLinkedQueue

  ConcurrentLinkedQueue不能阻塞队列,但是速度快。在不需要阻塞的情况下,应该优选ConcurrentLinkedQueue。

  ArrayBlockingQueue

  ArrayBlockingQueue是一个用数组实现的有界阻塞队列。在队列大小固定的情况下是优先选择,入队出队只有一把锁,锁的竞争会比较激烈。

  LinkedBlockingQueue

  LinkedBlockingQueue是一个用链表实现的有界阻塞队列,此队列的默认和最大长度为Integer.MAX_VALUE。在队列大小没有限制的情况下优先选择。入队和出队做了锁分离,对于锁的竞争会比较小。

  由于LinkedBlockingQueue是基于链表实现的,当队列容量较大,做查找操作时会比较耗时。

  PriorityBlockingQueue

   PriorityBlockingQueue是一个支持优先级的无界队列。默认情况下元素采取自然顺序排列,也可以通过比较器comparator来指定元素的排序规则。

   需要对队列中的元素做排序操作时,PriorityBlockingQueue是唯一的选择。

   DelayQueue

   DelayQueue一个支持延时获取元素的无界阻塞队列。队列中的每个元素都有一个延迟时间,只有当延迟时间到了之后才能执行出队操作。

  DelayQueue中锁添加的元素必须实现Delayed接口。

   SynchronousQueue

   SynchronousQueue是一个不存储元素的阻塞队列。每一个put操作必须等待一个take操作的完成,否则不能继续添加元素。

   SynchronousQueue可以用于快速交换元素,具有最快的速度。

   LinkedTransferQueue 

   LinkedTransferQueue是一个由链表结构组成的无界阻塞队列。相对于其他阻塞队列LinkedTransferQueue多了tryTransfer和transfer方法。

   transfer方法可以把生产者传入的元素立刻transfer(传输)给消费者。如果没有消费者在等待接收元素,transfer方法会将元素存放在队列的末端,并等到该元素被消费者消费了才返回。

   tryTransfer则是用来试探下生产者传入的元素是否能直接传给消费者。如果没有消费者等待接收元素,则立即返回false。

   LinkedBlockingDeque

   LinkedBlockingDeque是一个由链表结构组成的双向阻塞队列。不同于其他队列,入队只能在队尾,出队只能在队头,入队和出队可以发生在队尾或者队头。

   相比其他的阻塞队列,LinkedBlockingDeque多了addFirst,addLast,offerFirst,offerLast,peekFirst,peekLast等方法。

java中的各种Queue的更多相关文章

  1. 一篇图看清Java中的各种Queue

    说到数据结构,我们大概可以列出这么几个:数组,链表,栈,队列,集合,哈希表. 其中 队列 作为一个常用的数据结构,在Java中也有各种形式的实现. 顶级接口为java.util.queue. java ...

  2. Java 中的队列 Queue

    一.队列的定义 我们都知道队列(Queue)是一种先进先出(FIFO)的数据结构,Java中定义了java.util.Queue接口用来表示队列.Java中的Queue与List.Set属于同一个级别 ...

  3. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  4. Java中的集合Queue、LinkedList、PriorityQueue(四)

    Queue接口 Queue用于模拟了队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器.队列的头部保存在队列中时间最长的元素,队列的尾部保存在队列中时间最短的元素.新元素插入(offer)到 ...

  5. Java中的集合Queue

    2019独角兽企业重金招聘Python工程师标准>>> package com.zhaogang.test; import org.junit.Test; import java.u ...

  6. Java中使用队列Queue

    示例代码: Queue<Integer> queue = new LinkedList<Integer>(); for (int i = 1; i <= 100; i + ...

  7. java中并发Queue种类与各自API特点以及使用场景!

    一 先说下队列 队列是一种数据结构.它有两个基本操作:在队列尾部加入一个元素,和从队列头部移除一个元素(注意不要弄混队列的头部和尾部) 就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经 ...

  8. Java中的queue和deque对比详解

    队列(queue)简述 队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则.Java中,LinkedList实现了Queue接口,因为LinkedLis ...

  9. Java中的容器类(List,Set,Map,Queue)

    Java中的容器类(List,Set,Map,Queue) 一.基本概念 Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: 1)Collection.一个独立元素的序列,这些元素都 ...

随机推荐

  1. Gym 100952I&&2015 HIAST Collegiate Programming Contest I. Mancala【模拟】

    I. Mancala time limit per test:3 seconds memory limit per test:256 megabytes input:standard input ou ...

  2. Gym 100952H&&2015 HIAST Collegiate Programming Contest H. Special Palindrome【dp预处理+矩阵快速幂/打表解法】

    H. Special Palindrome time limit per test:1 second memory limit per test:64 megabytes input:standard ...

  3. [bzoj1774] [Usaco2009 Dec]Toll 过路费

    Floyd神用法...设dis[i][j]表示i点到j点的最短路(只算边权),map[i][j]表示i到j最小费用 将n个点先按照点权排一下序...这样就可以比较方便的求出路径上最大点权了... 因为 ...

  4. POJ3264-Balanced Lineup-线段树

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53721   Accepted: 25244 ...

  5. WERTYU(getchar()用法)

    题目连接:http://acm.tju.edu.cn/toj/showp.php?pid=13681368.   WERTYU Time Limit: 1.0 Seconds   Memory Lim ...

  6. 打开redis和solr

  7. ZipKin的原理的介绍

    结构概述       跟踪器(Tracers)存在在你的应用程序中生存,记录时间和关于操作的元数据.他们经常使用库,因此他们的使用对用户是透明的.例如,当它收到一个请求并发送一个响应时,一个感应器(i ...

  8. [国嵌攻略][127][tty驱动程序架构]

    tty概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. 1.串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备.Lin ...

  9. JavaScript函数声明提升

    首先,JavaScript中函数有两种创建方式,即函数声明.函数表达式两种. 1.函数声明. function boo(){ console.log(123); } boo() 2.函数表达式. va ...

  10. 2017-6-14 踩坑小结(Android文件读写 相关问题)

    填坑 getSlotFromBufferLocked: unknown buffer: 0xab7115e0 1. 在棉花糖(6.0)上莫名出现 未知缓冲 错误,百度了一下,貌似这个是Android6 ...