BlockingQueue 笔记整理(包括 ArrayBlockingQueue、LinkedBlockingQueue、BlockingDeque、PriorityBlockingQueue等)

本文详细介绍了Java并发编程中的BlockingQueue接口及其主要实现类,包括ArrayBlockingQueue、LinkedBlockingQueue、BlockingDeque、PriorityBlockingQueue等。分析了它们的锁机制、内存分配、公平性以及常用方法,帮助读者理解各种队列的特点和使用场景。
摘要由CSDN通过智能技术生成

BlockingQueue

 

ArrayBlockingQueue

  锁&条件

    实现的队列中的锁是没有分离的,即生产和消费用的是同一个锁

        吞吐相对低一点

    两个条件(notFull、notEmpty)

  内存分配

    提前分配好一大块连续的内存

    如果内存碎片较多的时候,就不合适

    入队、出队时,直接对象进出(几乎再无内存分配)

        因此在插入或删除元素时不会产生或销毁任何额外的对象实例

  大小

    需提前指定

  公平性

    默认非公平阻塞队列

        ArrayBlockingQueue nonFairQueue = new ArrayBlockingQueue(2);

    公平阻塞队列

        ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(2,true);

  方法

    入队

        共同点

                须获取到操作锁(出、入是同一把锁)

                随机唤醒一个在出列方法中(take方法、poll的超时方法)中阻塞的线程

                notEmpty.signal()

                有返回值的,就不会阻塞;阻塞的,就没有返回值(因为不知道什么时候返回)

        put

                成功

                返回 void

                失败

                (一直)阻塞当前线程

                notFull.await()

        offer(E e)

                成功

                返回true

                失败

                返回 false

        offer(E e, long timeout, TimeUnit unit)

                同put()方法一样,唯一不同的是 put方法是永久等待,而这个方法是超时等待。

    出队

        共同点

                须获取到操作锁(出、入是同一把

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值