LinkedBlockingQueue

本文深入探讨了LinkedBlockingQueue的实现原理,包括其FIFO特性、容量管理、线程安全性及常用方法的用法。重点介绍了与ArrayBlockingQueue的区别,以及在并发应用中的性能考量。

LinkedBlockingQueue是一个基于已链接节点的、范围任意的blocking queue的实现。
    此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。
    新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,
    但是在大多数并发应用程序中,其可预知的性能要低。
    可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。
    如果未指定容量,则它等于 Integer.MAX_VALUE。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。

    1:如果未指定容量,默认容量为Integer.MAX_VALUE ,容量范围可以在构造方法参数中指定作为防止队列过度扩展。
    2:此对象是 线程阻塞-安全的   

   3:不接受 null 元素

    4:它实现了BlockingQueue接口。


    5:实现了 Collection 和 Iterator 接口的所有可选 方法。    


    6:在JDK5/6中,LinkedBlockingQueue和ArrayBlocingQueue等对象的poll(long timeout, TimeUnit unit)存在内存泄露Leak的对象AbstractQueuedSynchronizer.Node,据称JDK5会在Update12里Fix,JDK6会在Update2里Fix

 

  下面介绍几种常用的方法:

      定义一个输出方法:

  static void v(Object s){System.out.println(s.toString());}

 

  LinkedBlockingQueue<String>  bq=new LinkedBlockingQueue<String>();

    for(int i=0;i<100;i++)
    {
       bq.add("i"+i);//如果空间已满,此方法会抛出异常,所以这就是put,或者offer方法的优势所在
   }

        String s1=bq.take();//i0
    String s2=bq.take();//i1

        bq.offer("ix",5,TimeUnit.SECONDS);//在尾部插入一个元素,如果有必要    ,等待 指定的时间,使得队列变得可用。返回boolean值  表示是否插入成功。

        bq.put("ixx");//将指定的元素添加到队列的尾部,如有必要,则等待空间变得可用,如果空间满了,则会一直等到空间可用时,进行插入。

   bq.poll();//poll() //poll(long timeout, TimeUnit unit)  检索并移除此队列的头,如果此队列为空,则返回 null。

   bq.clear() 从队列彻底移除所有元素。

         bq.peek()检索,但是不移除此队列的头,如果此队列为空,则返回 null。

//区别一下几种方法:

1. offer(E e) offer(E e,long timeout,TimeUnit unit)

  和

  put(E e)

都是想队列中插入元素,如果使用offer,则当队列可用或者等待指定时间后队列可用时,才能将元素插入成功。

如果使用put(E e),则会一直等待队列可用时插入元素。因为此队列是线程阻塞的,所以会存在被其他线程锁住,不可使用的时期段

此队列的容量 要么为指定的固定容量,不指定,容量则为Integer.MAX_VALUE.

2.poll() poll(long timeout,TimeUnit unit)和peek();

  poll方法是 立刻或者等待指定时间后,获取并且移除队列的头。如果队列为空,则为null

  peek方法是  获取但不移除此队列的头,如果此队列为空,则为null

转载于:https://www.cnblogs.com/toSeeMyDream/p/5106230.html

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值