聊聊Java中的并发队列

本文详细介绍了Java中的并发队列,包括ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、ConcurrentLinkedQueue、PriorityBlockingQueue和DelayedQueue。这些队列各有特点,如ArrayBlockingQueue和LinkedBlockingQueue在阻塞和非阻塞操作上的区别,SynchronousQueue的特殊性质,以及无界队列如ConcurrentLinkedQueue的无锁实现和高吞吐量。同时,文章还讨论了阻塞队列在特定场景中的必要性。
摘要由CSDN通过智能技术生成

本文主要总体的说一说各种并发队列
首先来一张全体照
这里写图片描述

从有界无界上分
常见的有界队列为

  • ArrayBlockingQueue 基于数组实现的阻塞队列
  • LinkedBlockingQueue 其实也是有界队列,但是不设置大小时就时Integer.MAX_VALUE,内部是基于链表实现的
  • ArrayBlockingQueue 与 LinkedBlockingQueue 对比一哈
    • ArrayBlockingQueue 实现简单,表现稳定,添加和删除使用同一个锁,通常性能不如后者
    • LinkedBlockingQueue 添加和删除两把锁是分开的,所以竞争会小一些
  • SynchronousQueue 比较奇葩,内部容量为零,适用于元素数量少的场景,尤其特别适合做交换数据用,内部使用 队列来实现公平性的调度,使用栈来实现非公平的调度,在Java6时替换了原来的锁逻辑,使用CAS代替了
  • 上面三个队列他们也是存在共性的
    • put take 操作都是阻塞的
    • offer poll 操作不是阻塞的,offer 队列满了会返回false不会阻塞,poll 队列为空时会返回null不会阻塞
    • 补充一点,并不是在所有场景下,非阻塞都是好的,阻塞代表着不占用CPU,在有些场景也是需要阻塞的,put take 存在必有其存在的必然性

常见的无界队列

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值