阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

并发编程ConcurrentLinkedQueue使用示例详解

265次阅读
没有评论

共计 1696 个字符,预计需要花费 5 分钟才能阅读完成。

导读 这篇文章主要为大家介绍了并发编程 ConcurrentLinkedQueue 使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
ConcurrentLinkedQueue

ConcurrentLinkedQueue 是非阻塞线程安全的队列,适用于高并发的场景。是一个基于链接节点的无界线程安全队列,按照 FIFO(先进先出)原则对元素进行排序。队列元素中不可以放置 null 元素(内部实现的特殊节点除外)

并发编程 ConcurrentLinkedQueue 使用示例详解

ConcurrentLinkedQueue 原理
  • ConcurrentLinked 是由链表结构组成的线程安全的先进先出无界队列。
  • 当多线程要共享访问集合时,ConcurrentLinkedQueue 是一个比较好的选择。
  • 不允许插入 null 元素
  • 支持非阻塞地访问并发安全的队列,不会抛出 ConcurrentModifiationException 异常。
  • size 方法不是准确的,因为在统计集合的时候,队列可能正在添加元素,导致统计不准。
  • 批量操作 addAll、removeAll、retainAll、containsAll、equals 和 toArray 不保证原子性(操作不可分割)
  • 添加元素 happen-before 其他线程移除元素。
  • ConcurrentLinkedQueue 类继承 AbstractQueue 抽象类

    具有队列的功能; 实现了 Queue 接口,可作为队列使用。

  • ConcurrentLinkedQueue 继承于 AbstractQueue。
  • ConcurrentLinkedQueue 内部是通过链表来实现的。同时包含链表的头节点 head 和尾节点 tail。
  • ConcurrentLinkedQueue 按照 FIFO(先进先出)原则对元素进行排序。元素都是从尾部插入到链表,从头部开始返回。
  • ConcurrentLinkedQueue 的链表 Node 中的 next 的类型是 volatile,而且链表数据 item 的类型也是 volatile。ConcurrentLinkedQueue 就是通过 volatile 来实现多线程对竞争资源的互斥访问的。
  • 其中 head 节点存放链表第一个 item 为 null 的节点,tail 则并不是总指向最后一个节点
  • ConcurrentLinkedQueue 操作方法
    private transient volatile Node head;
    private transient volatile Node tail;
    public ConcurrentLinkedQueue() {head = tail = new Node(null);
    }

    构造函数中,新建了一个“内容为 null 的节点”,并设置表头 head 和表尾 tail 的值为新节点。head 和 tail 是 volatile 类型,具有 volatile 赋予的含义:“即对一个 volatile 变量的读,总是能看到(任意线程)对这个 volatile 变量最后的写入”。

    private static class Node {
        volatile E item;
        volatile Node next;
        Node(E item) {UNSAFE.putObject(this, itemOffset, item);
        }
    }

    Node 是单向链表节点,next 指向下一个 Node,item 用于存储数据。Node 中操作节点数据的 API,是通过 Unsafe 机制的 CAS 函数实现的;例如 casNext() 是通过 CAS 函数“比较并设置节点的下一个节点”。

    1、添加

    以 add(E e) 为例对 ConcurrentLinkedQueue 中的添加

    public boolean add(E e) {return offer(e);
    }

    add() 实际上是调用的 offer() 来完成添加操作的;offer(E e) 的作用就是将元素 e 添加到链表的末尾。

    2、删除

    poll():在链表头部获取并且移除一个元素

    poll() 的作用就是删除链表的表头节点,并返回被删节点对应的值。

    3、peek 操作

    peek 操作是获取链表头部一个元素(只读取不移除)。

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1696字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19348
    评论数
    4
    阅读量
    7802362
    文章搜索
    热门文章
    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

    2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

    2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...
    4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

    4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

      4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
    星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

    星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

    星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
    仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

    仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

    还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
    把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

    把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

    把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

    一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

    一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
    星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

    星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

    星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
    【开源神器】微信公众号内容单篇、批量下载软件

    【开源神器】微信公众号内容单篇、批量下载软件

    【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
    小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

    小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

    小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
    每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

    每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

    每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...