美文网首页
「Java 路线」| 阻塞队列

「Java 路线」| 阻塞队列

作者: 彭旭锐 | 来源:发表于2020-12-30 18:40 被阅读0次

    点赞关注,不再迷路,你的支持对我意义重大!

    🔥 Hi,我是丑丑。本文 「Java 路线」| 导读 —— 他山之石,可以攻玉 已收录,这里有 Android 进阶成长路线笔记 & 博客,欢迎跟着彭丑丑一起成长。(联系方式在 GitHub)


    前言

    • 队列 是先进先出(FIFO—first in first out)线性表,而 阻塞队列 则是支持阻塞地「入队」或「出队」的队列,阻塞队列最常见的应用场景是线程池。
    • 在这篇文章里,我将分析 阻塞队列的原理 & 实现,如果能帮上忙,请务必点赞加关注,这真的对我非常重要。

    目录


    1. 前置知识

    • 中断?等待?

    2. 什么是阻塞队列

    阻塞队列(BlockingQueue)是支持阻塞地「入队」或「出队」的队列:

    • 1、支持阻塞地入队: 当队列满时,入队会阻塞,直到队列不满或中断。
    • 2、支持阻塞地出队: 当队列为空时,出队会阻塞,直到队列非空或中断。

    应用场景: 解决生产者和消费者强耦合以及盛昌消费能力不均衡的问题。


    2. 阻塞队列的基本操作

    BlockingQueue 中并不是每一个方法都会阻塞,具体总结如下:

    用途 抛出异常 返回特殊值 阻塞,超时退出 阻塞
    入队 add(e) offer(e) offer(e,time,unit) put(e)
    出队 remove() poll() poll(time,unit) take()
    检查队头 element() peek() / /
    • 抛出异常: 当队列满时,入队会抛出IllegalStateException 异常。当队列空时,出队/检查会抛出 NoSuchElementException 异常;
    • 返回特殊值: 当队列满时,入队会返回 false。当队列空时,出队/检查会返回 null;
    • 超时退出:阻塞 类似,增加超时退出;
    • 阻塞: 当队列满时,入队会阻塞,直到队列非满或者中断。当队列空时,出队会阻塞,直到队列非空或者中断。

    3. 阻塞队列实现

    •ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
    •LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。
    •PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
    •DelayQueue:一个使用优先级队列实现的无界阻塞队列。
    •SynchronousQueue:一个不存储元素的阻塞队列。
    •LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
    •LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。

    BlockingDeque



    创作不易,你的「三连」是丑丑最大的动力,我们下次见!

    相关文章

      网友评论

          本文标题:「Java 路线」| 阻塞队列

          本文链接:https://www.haomeiwen.com/subject/twchoktx.html