LinkedBlockingQueue源码详细解读

本文深入探讨了Java中的LinkedBlockingQueue,从基本属性到入队、出队的源码分析,揭示了其内部机制。LinkedBlockingQueue依赖于ReentrantLock,并在队列满或空时实现阻塞。同时对比了ArrayBlockingQueue、ConcurrentLinkedQueue等其他阻塞队列的特点。
摘要由CSDN通过智能技术生成

前文回顾

本文简单介绍下各种阻塞队列,然后详细看下LinkedBlockingQueue的源码。其实阻塞队列的实现,在思想上有很大一部分是相通的。而且在线程池中也会用到各种BlockingQueue,FixedThreadPool使用的就是LinkedBlockingQueue。知道一个以后其他的理解起来也不难。LinkedBlockingQueue的实现依赖于入队锁(putLock)和出队锁(takeLock),就是ReentrantLock。不了解的同学可以先学习一下~

文章导读

  • 阻塞队列简述
  • LinkedBlockingQueue基本属性
  • 入队源码,add(),offer(),put(),enqueue()
  • 出队源码,poll(),take(),dequeue()
  • 总结

一、简单介绍各种阻塞队列

阻塞队列大致可以分为这几种:ArrayBlockingQueue,LinkedBlockingQueue,ConcurrentLinkedQueue,DelayQueue,LinkedTransferQueue,SynchronusQueue。

ArrayBlockingQueue--数组实现的有界队列
会自动阻塞,根据调用api不同,有不同特性,当队列容量不足时,有阻塞能力。
boolean add(E e):在容量不足时,抛出异常。
void put(E e):在容量不足时,阻塞等待。
boolean offer(E e):不阻塞,容量不足时返回false,当前新增数据操作放弃。
boolean offer(E e, long timeout, TimeUnit unit):容量不足时,阻塞times时长(单位为timeunit),如果在阻塞时长内,有容量空闲,新增数据返回true。如果阻塞时长范围内,无容量空闲,放弃新增数据,返回false。

LinkedBlockingQueue--链式队列,队列容量不足或为0时自动阻塞
void put(E e):自动阻塞,队列容量满后,自动阻塞。
E take():自动阻塞,队列容量为0后,自动阻塞。

ConcurrentLinkedQueue--基础链表同步队列
boolean offer(E e):入队。
E peek():查看queue中的首数据。
E poll():取出queue中的首数据。

DelayQueue--延时队列
根据比较机制,实现自定义处理顺序的队列。常用于定时任务,如:定时关机。
int compareTo(Delayed o):比较大小,自动升序。
比较方法建议和getDelay方法配合完成。如果在DelayQueue是需要按时完成的计划任务,必须配合getDelay方法完成。
long getDelay(TimeUnit unit):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值