转载请注明源出处:http://www.cnblogs.com/lighten/p/7494577.html

1.前言

  本章介绍LinkedBlockingDeque,这是一个可选容量的有界双向链表队列,默认容量大小是Integer.MAX_VALUE,基本可以认为是无界了。其方法大多是常量时间操作,除了remove相关方法和contains以及所有bulk操作是和元素个数相关的线性时间开销。

2.LinkedBlockingDeque

2.1数据结构

  标准的一个双向链表的结构,第一个节点,最后一个节点,计数字段,容量字段和锁相关的三个字段。Node节点也就是前后结点和当前值。

2.2基本操作

  头结点插入一个元素:

  加锁,判断容量,将当前结点的下一个节点设置成当前头结点,该节点设置成头结点。第一次插入last为null,由于是头插入,第一次的头结点就设置成尾结点,否则就完成双向链表的链接。尾插入的做法类似,不过更新的是尾结点。

  取出头结点:

  加锁,找到当前头结点,如果为null,证明队列为空返回null。不为null,找到下一个节点,设置成头结点。下一个节点为null,队列为空,尾结点也就是null,否者下一个节点的没有前一个节点。返回当前头节点里面的内容。这里有意思的是当前头结点的内容置为了null,但是下一个节点置为其本身,注释上写着help GC,由于没有对GC回收研究过,所以暂且这样认为。

  上面都是一些标准的双向链表的头尾插入方法,其它方法没有什么特殊的,就不再进行介绍。使用和一般的队列使用方法是一样的,也不给出用例了。

Java之集合(十九)LinkedBlockingDeque的更多相关文章

  1. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

  2. “全栈2019”Java多线程第二十九章:可重入锁与不可重入锁详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. “全栈2019”Java多线程第十九章:死锁详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  4. “全栈2019”Java异常第十九章:RuntimeException详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  5. “全栈2019”Java第八十九章:接口中能定义内部类吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第七十九章:类中可以嵌套接口吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第六十九章:内部类访问外部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第五十九章:抽象类与抽象方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第四十九章:重载与重写对比详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 03-vue-router

    前端路由的实现原理 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. 8.7 使用索引-notes

    七 正确使用索引 一 索引未命中 并不是说我们创建了索引就一定会加快查询速度,若想利用索引达到预想的提高查询速度的效果,我们在添加索引时,必须遵循以下问题 1 范围问题,或者说条件不明确,条件中出现这 ...

  3. ArcGIS Desktop python Add-in Python 插件的文件结构

    如上图所示: 插件文件夹在根目录下有一个config.xml文件,这个文件保存有在向导添加的描述该插件的定制信息. 插件还有一个安装文件夹,这个文件夹的主要功能是存放Python脚本. 你可以在安装文 ...

  4. 博客搬家到 http://leijun00.github.io

    博客园对markdown支持不太好,搬家到 http://leijun00.github.io

  5. The MATLAB Profiler

    function a = myFunc(a,b,c,d,e) : a = a-b + c^d*log(e); end end >> profile on; myFunc(a,b,c,d,e ...

  6. 如何处理App的Application的事件

    http://blog.sina.com.cn/s/blog_44fa172f0102vwr2.html 直接上代码,还有条经验就是SetApplicationEventHandler可注册多个事件方 ...

  7. 跨终端Web

    1.终端vs设备 H5页面运行在同一设备的不同终端下. (1)Web浏览器. (2)微信.QQ浏览器. (3)移动App的Webview. (4)TV机顶盒. 2.跨终端的实现方式 (1)响应式 存在 ...

  8. CSharp程序员学Android开发---2.个人总结的快捷键

    最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历 ...

  9. Ruby on Rails 生成指定版本的 Rails 项目

    ruby-on-rails ruby 本地 Rails 默认5.1.6 版本 $ gem list --local rails (5.1.6, 5.1.5, 5.1.4) 使用 version 生成指 ...

  10. SQL 2012新分页方式

    --2012的OFFSET分页方式 (推荐使用 - 较为方便) select number from spt_values where type='p' order by number offset ...