三.多线程JUC篇-3.22 LinkedBlockingQueue

1.概述

  • LinkedBlockingQueue内部由单链表实现,只能从head取元素,从tail添加元素。
  • 添加元素和获取元素都有独立的锁,也就是说LinkedBlockingQueue是读写分离的,读写操作可以并行执行。LinkedBlockingQueue采用可重入锁(ReentrantLock)来保证在并发情况下的线程安全。
  • LinkedBlockingQueue可以指定边界,也可以是无边界

2.构造器

LinkedBlockingQueue一共有三个构造器,分别是无参构造器、可以指定容量的构造器、可以传入一个容器的构造器。
如果在创建实例的时候调用的是无参构造器,LinkedBlockingQueue的默认容量Integer.MAX_VALUE,这样做很可能会导致队列还没有满,但是内存却已经满了的情况(内存溢出)。

public LinkedBlockingQueue()  //设置容量为Integer.MAX
public LinkedBlockingQueue(int capacity) //设置指定容量
public LinkedBlockingQueue(Collection<? extends E> c) //传入一个容器,如果调用该构造器,
													  //容量默认也是Integer.MAX_VALUE

3.LinkedBlockingQueue常用操作

3.1 取数据

  • take():首选。当队列为空时阻塞
  • poll():弹出队顶元素,队列为空时,返回空
  • peek():和poll烈性,返回队队顶元素,但顶元素不弹出。队列为空时返回null
  • remove(Object o):移除某个元素,队列为空时抛出异常。成功移除返回true

3.2 添加数据

  • put():首选。队满是阻塞
  • offer():队满时返回false

3.3 其它

  • isEmtpy():判定队列是否为空
  • size():队列大小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值