LinkedBlockingQueue源码解读,附出队入队详细流程图

本文详细介绍了Java中的LinkedBlockingQueue,包括其基于链表的数据结构、双锁机制确保的并发安全以及入队、出队操作的源码解读。通过深入理解,读者将了解到该队列在多线程环境下的高效性能和使用注意事项。
摘要由CSDN通过智能技术生成

概述

LinkedBlockingQue是一个基于链表实现的可设置容量的无界(最大值Integer.MAX_VALUE)阻塞队列。队头的元素是插入时间最长的,队尾的元素是最新插入的。新的元素将会被插入到队列的尾部。

1、数据结构

基于链表,所以队列中至少有一个空元素,头结点不含元素。

2、原理

LinkedBlockingQueue中有两把锁,takeLock和putLock,即读写各一把锁。这就意味着只有读读、写写互斥,读写可以同时进行。
为了保证读写操作过程中队列元素个数的可见性和原子性,队列的元素变量count类型为AtomicInteger,且只在读写锁定过程中对其值进行增减,后面源码部分会涉及到。

3、 源码解读

3.1 变量

LinkedBlockingQueue阻塞队列中定义了入队锁putLock、出队锁takeLock及其相关的两个Condition对象notFullnotEmpty ,容量capacity、队头head、队尾last节点、队列中元素数量count
不再做详细介绍。

3.2 构造方法

LinkedBlockingQueue的构造方法有三个,分别如下:

  • 未设置容量大小,默认容量大小为Integer.MAX_V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值