07 堵塞队列你知道吗?

阻塞队列有哪些

  • ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)对元素进行排序。
  • LinkedBlokcingQueue:是一个基于链表结构的阻塞队列,此队列按 FIFO(先进先出)对元素进行排序,吞吐量通常要高于 ArrayBlockingQueue。
  • SynchronousQueue:是一个不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于 LinkedBlokcingQueue。

什么是阻塞队列

img

  • 阻塞队列,顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示:
  • 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。
  • 当阻塞队列是满时,往队列里添加元素的操作将会被阻塞。

  • 核心方法

    | 方法\行为 | 抛异常 | 特定的值 | 阻塞 | 超时 |
    | :——-: | :——-: | :—————: | :—-: | :————————-: |
    | 插入方法 | add(o) | offer(o) | put(o) | offer(o, timeout, timeunit) |
    | 移除方法 | | poll()、remove(o) | take() | poll(timeout, timeunit) |
    | 检查方法 | element() | peek() | | |

  • 行为解释:

    • 抛异常:如果操作不能马上进行,则抛出异常

    • 特定的值:如果操作不能马上进行,将会返回一个特殊的值,一般是 true 或者 false

    • 阻塞:如果操作不能马上进行,操作会被阻塞

    • 超时:如果操作不能马上进行,操作会被阻塞指定的时间,如果指定时间没执行,则返回一个特殊值,一般是 true 或者 false

  • 插入方法:

    • add(E e):添加成功返回true,失败抛 IllegalStateException 异常
    • offer(E e):成功返回 true,如果此队列已满,则返回 false
    • put(E e):将元素插入此队列的尾部,如果该队列已满,则一直阻塞
  • 删除方法:

    • remove(Object o) :移除指定元素,成功返回true,失败返回false
    • poll():获取并移除此队列的头元素,若队列为空,则返回 null
    • take():获取并移除此队列头元素,若没有元素则一直阻塞
  • 检查方法:

    • element() :获取但不移除此队列的头元素,没有元素则抛异常
    • peek() :获取但不移除此队列的头;若队列为空,则返回 null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值