Java 经典面试题:聊一聊 JUC 下的 LinkedBlockingQueue

本文聊一下 JUC 下的 LinkedBlockingQueue 队列,先说说 LinkedBlockingQueue 队列的特点,然后再从源码的角度聊一聊 LinkedBlockingQueue 的主要实现~

LinkedBlockingQueue 有以下特点:

  • LinkedBlockingQueue 是阻塞队列,底层是单链表实现的~
  • 元素从队列尾进队,从队列头出队,符合FIFO~
  • 可以使用 Collection 和 Iterator 两个接口的所有操作,因为实现了两者的接口~
  • LinkedBlockingQueue 队列读写操作都加了锁,但是读写用的是两把不同的锁,所以可以同时读写操作~

LinkedBlockingQueue 队列继承了 AbstractQueue 类,实现了 BlockingQueue 接口,LinkedBlockingQueue 主要有以下接口:

//将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量)
//在成功时返回 true,如果此队列已满,则抛IllegalStateException。 
boolean add(E e); 

//将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量) 
// 将指定的元素插入此队列的尾部,如果该队列已满, 
//则在到达指定的等待时间之前等待可用的空间,该方法可中断 
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException; 

//将指定的元素插入此队列的尾部,如果该队列已满,则一直等到(阻塞)。 
void put(E e) throws InterruptedException; 

//获取并移除此队列的头部,如果没有元素则等待(阻塞), 
//直到有元素将唤醒等待线程执行该操作 
E take() throws InterruptedException; 

//获取并移除此队列的头,如果此队列为空,则返回 null。 
E poll();
//获取并移除此队列的头部,在指定的等待时间前一直等到获取元素, //超过时间方法将结束
E poll(long timeout, TimeUnit unit)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值