java队列

本文详细介绍了Java中的各种队列类型,包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等,对比了它们的线程安全、容量限制、阻塞与非阻塞特性,以及适用的生产和消费模式。
摘要由CSDN通过智能技术生成

java队列父类都是Queue,和list对比主要有以下几个特点

  • 先进先出
  • 线程安全
  • 不支持随机访问
队列类型

        chatGPT复制过来

  1. ArrayBlockingQueue: 基于数组实现的有界阻塞队列。适用于生产者-消费者模式,能够协调生产者和消费者之间的速度差异。

  2. LinkedBlockingQueue: 基于链表实现的可选有界/无界阻塞队列。与 ArrayBlockingQueue 不同,LinkedBlockingQueue 可以选择是否有界。同样适用于生产者-消费者模式。

  3. PriorityBlockingQueue: 基于堆实现的无界阻塞优先级队列。元素根据优先级进行排序,具有公平性,先进先出顺序。

  4. ConcurrentLinkedQueue: 基于链表实现的无界非阻塞队列。适用于高并发场景,不需要额外的同步措施。

  5. DelayQueue: 基于优先级队列实现的延迟队列,用于在指定延迟时间后获取元素。适用于定时任务调度等场景。

  6. SynchronousQueue: 一种特殊的无容量队列,用于在线程之间传递单个元素。生产者必须等待消费者获取元素后才能插入新元素。

  7. LinkedTransferQueue: 基于链表实现的无界队列,具有传输性质。除了普通队列的功能外,还支持直接将元素传输给等待的消费者。

  8. LinkedBlockingDeque: 基于链表实现的双端队列,可以在队头和队尾同时进行插入和移除操作。

有界:  需要定义队列容量,  队列已满时抛出异常或等待

无界:  理论上可以无限添加元素  ,  可能导致内存溢出

阻塞:   

        使用上:  读取时 队列没有元素时可以阻塞等待   写入时  阻塞等待空的位置

        实现上:    有锁(ReentrantLock  可重入锁),多个线程不可同时进行操作

非阻塞: 

        使用上:  读取和写入时不能等待

        实现上:    无锁,采用其他算法(CAS)来实现线程安全性,多个线程可以同时操作

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值