尝试将节点加入到first之前,更新first,如果插入之后超出容量,返回false。

private boolean linkFirst(Node node) {

// assert lock.isHeldByCurrentThread();

if (count >= capacity)

return false;

Node f = first;

node.next = f;

first = node;

if (last == null)

last = node;

else

f.prev = node;

++count;

notEmpty.signal();

return true;

}

linkLast

============

在last节点后加入节点node,更新last。如果插入之后超出容量,返回false。

private boolean linkLast(Node node) {

// assert lock.isHeldByCurrentThread();

if (count >= capacity)

return false;

Node l = last;

node.prev = l;

last = node;

if (first == null)

first = node;

else

l.next = node;

++count;

notEmpty.signal();// 满足notEmpty条件

return true;

}

unlinkFirst

===============

移除first节点,并返回其item值,如果队列为空,则返回full。

private E unlinkFirst() {

// assert lock.isHeldByCurrentThread();

Node f = first;

if (f == null)

return null;

Node n = f.next;

E item = f.item;

f.item = null;

f.next = f; // help GC

first = n;

if (n == null)

last = null;

else

n.prev = null;

–count;

notFull.signal();// 满足notFull条件

return item;

}

unlinkLast

==============

移除last节点,并返回其item值,如果队列为空,则返回full。

private E unlinkLast() {

// assert lock.isHeldByCurrentThread();

Node l = last;

if (l == null)

return null;

Node p = l.prev;

E item = l.item;

l.item = null;

l.prev = l; // help GC

last = p;

if (p == null)

first = null;

else

p.next = null;

–count;

notFull.signal(); // 满足notFull条件

return item;

}

unlink

==========

移除任意一个节点,注意这里并没有操作x本身的连接,因为它可能仍被iterator使用着。

void unlink(Node x) {

// assert lock.isHeldByCurrentThread();

Node p = x.prev;

Node n = x.next;

// 移除的是first

if (p == null) {

unlinkFirst();

// 移除的是last

} else if (n == null) {

unlinkLast();

} else {

// 移除的是中间节点

p.next = n;

n.prev = p;

x.item = null;

// Don’t mess with x’s links. They may still be in use by

// an iterator.

Java并发包源码学习系列:LBD双端阻塞队列源码解析相关推荐

  1. Java并发包源码学习系列:同步组件CountDownLatch源码解析

    文章目录 CountDownLatch概述 使用案例与基本思路 类图与基本结构 void await() boolean await(long timeout, TimeUnit unit) void ...

  2. SpringBoot源码学习系列之异常处理自动配置

    SpringBoot源码学习系列之异常处理自动配置 1.源码学习 先给个SpringBoot中的异常例子,假如访问一个错误链接,让其返回404页面 在浏览器访问: 而在其它的客户端软件,比如postm ...

  3. java毕业生设计在线多媒体学习社区的设计与实现计算机源码+系统+mysql+调试部署+lw

    java毕业生设计在线多媒体学习社区的设计与实现计算机源码+系统+mysql+调试部署+lw java毕业生设计在线多媒体学习社区的设计与实现计算机源码+系统+mysql+调试部署+lw 本源码技术栈 ...

  4. PyTorch源码学习系列 - 1.初识

    本系列文章会优先发布于微信公众号和知乎,欢迎大家关注 微信公众号:小飞怪兽屋 知乎: PyTorch源码学习系列 - 1.初识 - 知乎 (zhihu.com) 目录 本系列的目的 PyTorch是什 ...

  5. Netty源码分析系列之服务端Channel的端口绑定

    扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,Spring源码分析和Java并发编程文章. 微信公众号 问题 本文内容是接着前两篇文章写的,有兴趣的朋友可以先去阅读下两篇文章: Ne ...

  6. cocos2dx+JAVA手游《全民挂机》全套源码支持安卓+IOS双端

    cocos2dx+JAVA手游<全民挂机>全套源码支持安卓+IOS双端,客户端用cocos2dx 2.2.3实现,服务端用java,支持安卓+IOS双端,一款很不错的挂机游戏源码! 源码下 ...

  7. 并发编程5:Java 阻塞队列源码分析(下)

    上一篇 并发编程4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  8. java计算机毕业设计高校多媒体设备运维管理系统服务端(附源码、数据库)

    java计算机毕业设计高校多媒体设备运维管理系统服务端(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  9. Android音视频学习系列(九) — Android端实现rtmp推流

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

最新文章

  1. mysql 十万条 输出_MySQL一次性插入十万条数据
  2. 独家 | 自动机器学习:团队如何在自动学习项目中一起工作?(附链接)
  3. 你朋友圈里的广告是怎么做到合你胃口的?
  4. 两个数据库表同步的可视化WEB同步程序
  5. 《无人机DIY》——导读
  6. signature=32c56289e10e63e51063305adfc34ef0,Deconfinement transition and Black Holes
  7. Qt qlabel 设置字体、大小、加粗等
  8. 笔记本计算机被限制无法上网,电脑上网受限制或无法连接怎么办 电脑上网受限制或无法连接的解决方法...
  9. 如何对接线上支付接口
  10. Python 爬取小说点评网站,用大数据方法找小说
  11. Linux下查看电脑配置信息
  12. swiper 滑动图片垂直居中
  13. Deep Attention Recurrent Q-network(DRAQN)论文笔记
  14. jmeter压测生成报告
  15. 多伦多大学计算机ib成绩要求,QS世界Top30大学 A-level及IB 成绩详细要求!
  16. clap与slap_clap什么意思(slap与clap的区别)
  17. vue中使用Luckysheet实现Excel的导入、在线编辑、导出等功能
  18. magento2 邮件模板中直接调用 block文件
  19. android实现手机端控制电脑PPT播放的APP(一)
  20. 后端 绘制有向无环图(DAG图)

热门文章

  1. Promise实现一个红绿灯
  2. antd modal 拖动_Package - antd-draggable-modal
  3. 【韩老师零基础30天学会Java 09】Math Arrays 数组拷贝 自然排序 System BigDecimal 银行家算法舍入 日期类LocalDateTime转换 String翻转
  4. LVS-DR模式单网段和多网段设置步骤
  5. Java基于springboot开发的党员党务管理系统(主要侧重于开会流程)
  6. HTML5+CSS3基础(day6)
  7. Android View体系(2)
  8. Geotools与OGC(三)----WKB几何信息读取
  9. 说话人识别/声纹识别学习路径的资料整理,从零学声纹识别
  10. WSL2安装及其python环境配置