并发容器小结及ConcurrentSkipListMap介绍——并发系列(十一)

目录

概述

ConcurrentHashMap

CopyOnWriteArrayList

ConcurrentLinkedQueue

BlockingQueue

ConcurrentSkipListMap

设计目的

功能特性

与其他相关类对比

适用场景


概述

JDK提供的这些容器大部分在 java.util.concurrent 包中。我们这里挑选出了一些比较有代表性的并发容器类,来感受一下JDK自带的并发集合带来的便利:

        在前面几篇也分别对这些类进行了使用场景介绍及源码解析:

ConcurrentHashMap

ConcurrentHashMap源码解析

CopyOnWriteArrayList

CopyOnWriteArrayList源码解析

ConcurrentLinkedQueue

ConcurrentLinkedQueue源码解析

BlockingQueue

阻塞队列BlockingQueue应用及源码解析

ConcurrentSkipListMap

        它实现了 ConcurrentMap 接口,提供了线程安全的有序映射

设计目的

  ConcurrentSkipListMap 的设计目的是在多线程环境下提供一个有序的、线程安全的键值对映射结构。它通过跳表(Skip List)数据结构来实现高效的查找、插入和删除操作,同时保证在多线程并发访问时的数据一致性和线程安全性。与基于红黑树实现的 TreeMap 不同,跳表结构在并发环境下具有更好的扩展性和性能。

功能特性

有序性ConcurrentSkipListMap 按照键的自然顺序(如果键实现了 Comparable 接口)或在构造时提供的 Comparator 进行排序。这使得可以方便地对映射中的键值对进行范围查询、遍历等操作。例如:

ConcurrentSkipListMap<Integer, String> map = new ConcurrentSkipListMap<>();
map.put(3, "three");
map.put(1, "one");
map.put(2, "two");
System.out.println(map.firstKey()); // 输出 1
System.out.println(map.lastKey());  // 输出 3

线程安全性ConcurrentSkipListMap 是线程安全的,可以在多线程环境下安全地进行读写操作。多个线程可以同时读取映射,而写入操作(如插入、删除、更新)也能在不影响其他线程读取的情况下进行,通过内部的锁分段技术和无锁数据结构实现高效并发控制。

ExecutorService executorService = Executors.newFixedThreadPool(10);
ConcurrentSkipListMap<Integer, String> concurrentMap = new ConcurrentSkipListMap<>();
for (int i = 0; i < 10; i++) {executorService.submit(() -> {concurrentMap.put((int) (Math.random() * 100), "value");});
}
executorService.shutdown();

高效的操作性能:跳表结构使得 ConcurrentSkipListMap 在查找、插入和删除操作上具有平均 O(logn) 的时间复杂度,其中 n 是映射中的元素数量。这使得它在处理大量数据时,性能表现良好。尤其在高并发读多写少的场景下,性能优势更为明显。

范围查询:支持范围查询操作,例如可以获取键在某个范围内的子映射。例如:

ConcurrentSkipListMap<Integer, String> map = new ConcurrentSkipListMap<>();
// 填充数据
map.put(1, "a");
map.put(3, "c");
map.put(5, "e");
ConcurrentNavigableMap<Integer, String> subMap = map.subMap(2, true, 4, true);
System.out.println(subMap); // 输出 {3=c}

与其他相关类对比

  • 与 TreeMap 对比
    • 线程安全性TreeMap 不是线程安全的,在多线程环境下需要外部同步机制来保证线程安全;而 ConcurrentSkipListMap 本身就是线程安全的,适合多线程并发访问。
    • 性能:在高并发场景下,ConcurrentSkipListMap 由于采用跳表结构和更细粒度的并发控制,通常比使用外部同步的 TreeMap 性能更好。
  • 与 ConcurrentHashMap 对比
    • 有序性ConcurrentHashMap 不保证键的顺序,而 ConcurrentSkipListMap 保证键的有序性。如果应用需要按照键的顺序进行操作,如范围查询、遍历等,ConcurrentSkipListMap 是更好的选择。
    • 性能ConcurrentHashMap 在高并发读写场景下具有非常高的性能,尤其是在写操作较多的情况下。而 ConcurrentSkipListMap 在范围查询和有序遍历方面表现更好,读操作性能也不错,但写操作相对 ConcurrentHashMap 可能稍慢,因为需要维护跳表结构的有序性。

适用场景

  • 缓存系统:当缓存需要按照某种顺序(如访问时间、过期时间等)进行管理时,ConcurrentSkipListMap 可以作为缓存的底层数据结构。例如,实现一个带有过期策略的缓存,按照过期时间排序,便于清理过期数据。
  • 实时统计:在实时统计系统中,需要对数据按照某个维度(如时间戳、数值大小等)进行排序并实时更新。例如,统计一段时间内用户的登录次数,并按照登录次数排序展示,ConcurrentSkipListMap 可以满足这种需求。
  • 索引结构:在一些需要对数据建立索引,并支持多线程并发访问和范围查询的场景下,ConcurrentSkipListMap 可以作为索引的实现方式。例如,在数据库的某些索引模块中,使用 ConcurrentSkipListMap 可以提供高效的并发访问和范围查找功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920173.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝思科技半年净利超11亿,蓝思成绩单怎么分析?

8月26日&#xff0c;蓝思科技发布2025年半年度业绩报告&#xff0c;其中&#xff0c;净利润11.43亿元&#xff0c;同比增长32.68%。这份成绩单我们该怎么分析&#xff1a;首先&#xff0c;蓝思科技营收与利润双增长&#xff0c;成长能力持续凸显。报告期内&#xff0c;公司营业…

【GM3568JHF】FPGA+ARM异构开发板 应用编辑及源码下载

早期因为处理器芯片性能不够&#xff0c;存储空间不多以及编译性能不够等因素&#xff0c; 早期的开发板普遍采用交叉编译的方式&#xff0c; 而交叉编译的方式会有几种缺点&#xff1a; 不能离线编译&#xff0c; 操作麻烦&#xff0c; 环境配置复杂等 GM-3568JHF的处理器性能…

华为仓颉语言的函数初步

华为仓颉语言的函数初步函数是一段完成特定任务的独立代码片段&#xff0c;可以通过函数名字来标识&#xff0c;这个名字可以被用来调用函数。要特别注意&#xff0c;与C/C、Python等语言不同&#xff0c;仓颉禁止参数重新赋值——函数参数均为不可变&#xff08;immutable&…

服务初始化

目录 1.配置yum源 2. 更新系统与安装必备工具 3. 网络连接验证 4. 配置主机名 5. 同步时间 6. 配置防火墙 (两种方式) 6.1 iptables 6.2firewalld 1.配置yum源 1. 备份原有的源文件&#xff0c;以防万一 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.…

ICBC_TDR_UShield2_Install.exe [ICBC UKEY]

流程&#xff1a;1&#xff09;插入U盾&#xff0c;记住检测到U盾类型&#xff0c;需要根据这个下载驱动

在线提取维基百科Wikipedia文章页面及离线批处理Wikipedia XML Dump文件

1. 在线提取维基百科Wikipedia文章 本项目提供一个增强型 Wikipedia 概念条目抓取与摘要清洗脚本&#xff1a;支持多级回退策略 (wikipedia 库 →wikipediaapi → 直接网页 / REST 搜索)、智能标题匹配(精确/模糊判定)、摘要质量校验、内容结构化抽取、断点续跑(结果缓存)、统…

安全合规:AC(上网行为安全)--下

五、SSL移动接入方案概述1、SSL VPN概述SSL VPN是一种远程安全接入技术&#xff0c;因为采用SSL协议而得名。因为Web浏览器都内嵌支持SSL协议&#xff0c;使得SSL VPN可以做到“无客户端”部署。SSL VPN一般采用插件系统来支持各种TCP和UDP的非Web应用&#xff0c;使得SSL VPN真…

【86页PPT】特种车行业SAP解决方案(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808859/91716699 资料解读&#xff1a;《【86页PPT】特种车行业SAP解决方案》 ​​详细资料请看本解读文章的最后内容​​ 作为特种车行业信息化建…

【Kubernetes k8s】(两万字超详细)Ubuntu-22.04搭建 k8s-1.30.1集群,开启Dashboard-2.7.0、部署ingress-nginx-1.10.1

Ubuntu-22.04搭建 k8s-1.30.1集群&#xff0c;开启Dashboard-v2.7.0&#xff08;以及Token不生成的问题&#xff09;、部署ingress-nginx-1.10.1 引言 最近在研究分布式计算&#xff0c;想将分布式计算都容器化&#xff0c;使用 k8s 来调度&#xff0c;所以从0开始学 k8s &…

podman启动mongdb的container因为权限问题导致changing ownership和读取storage.bson失败的解决方法

用FROM mongo:8.0.8 为基础镜像&#xff0c;加了些初始化数据做的mongodb镜像。用podman管理和backend&#xff0c;frontend组成一个简单的BS架构。利用podman创建pod&#xff0c;3个镜像同用一个空间&#xff0c;项目内部连接就可以统一用127.0.0.1加上端口进行通信了。 要使…

UE5基本打光(新手向)

在UE5中场景照明往往是构建沉浸式视觉体验的关键环节与常见挑战。学会如何打光可以为项目创建出更具表现力和艺术感的灯光效果。 1.以UE5建筑展示demo为例&#xff0c;首先删除旧的光照&#xff0c;将光照相关配置放置新的场景Light中。这样更适合多人分工。 光照子场景Light&…

PiscCode使用OpenCV和Python实现运动检测与可视化

光流分析是计算机视觉中的重要技术&#xff0c;用于检测视频序列中物体的运动模式。本文将介绍如何使用OpenCV和Python实现一个实时的光流分析系统&#xff0c;该系统能够检测运动、生成热力图并提供详细的统计分析。 技术概述 本系统基于Farneback稠密光流算法&#xff0c;能…

Day 36 复习日

浙大疏锦行 今天是复习日&#xff0c;神经网络与机器学习最大的不同就是不止固定的三行代码&#xff0c;需要自己定义一个模型&#xff0c;先继承类的属性&#xff0c;然后去写自己的属性&#xff0c;以及前向传播方法&#xff0c;可以手动构建&#xff1a;中间层的数量、每一…

ES6/ES2015 - ES16/ES2025

ES6/ES2015 - ES16/ES2025 ECMAScript&#xff08;简称ES&#xff09;是JavaScript的官方标准&#xff0c;从2015年开始每年发布一个新版本。 版本一览表年份版本主要新特性2015ES6/ES2015let/const、箭头函数、Class、模板字符串、解构赋值、模块、Promise2016ES7/ES2016指数运…

BIM 地铁站可视化:智慧运维 “透视镜”

图扑 BIM 地铁站可视化系统&#xff0c;以三维建模完整复刻车站空间&#xff0c;从出入口、站厅到设备层&#xff0c;管线走向、设施分布精准呈现。实时汇聚客流数据、空调等设备运行状态&#xff0c;动态标记设备告警、空间占用情况。通过透明化模型&#xff0c;运维人员可直观…

淘宝商品详情页数据接口设计与实现:从合规采集到高效解析

在电商数据分析、比价系统开发等场景中&#xff0c;商品详情页数据是核心基础。本文将围绕淘宝商品详情页数据接口的合规设计、高效采集与智能解析展开&#xff0c;提供一套可落地的技术方案&#xff0c;重点解决动态渲染、参数加密与数据结构化等关键问题。 一、接口设计原则…

HTML应用指南:利用GET请求获取中国银行人民币存款利率数据

人民币存款利率是影响居民储蓄行为和企业资金配置的关键因素&#xff0c;也是宏观经济调控的重要工具。中国银行根据中国人民银行的指导政策&#xff0c;结合市场情况与自身经营策略&#xff0c;定期调整并公布人民币存款利率标准。这些利率信息主要涵盖活期存款、定期存款&…

RPS和QPS

简介 这是系统设计中两个最核心且容易混淆的性能指标。简单来说&#xff1a; • RPS 是 “每秒请求数”&#xff0c;是从客户端或负载均衡器的视角看&#xff0c;服务器每秒接收到的请求数量。 • QPS 是 “每秒查询数”&#xff0c;通常是从数据库或特定服务的视角看&…

如何将用户反馈转化为可执行需求

用户反馈是企业优化产品、改进服务的重要依据。将用户反馈转化为可执行需求的核心在于通过系统化的流程对反馈进行收集、分析和分类&#xff0c;并结合企业的战略目标与技术能力&#xff0c;制定出具体的执行方案。这一过程不仅要求企业深入理解用户需求&#xff0c;还需要跨部…

ry-vue docker部署

目录 整体架构概览 创建 Docker 自定义网络 Redis 部署&#xff08;缓存服务&#xff09; redis.conf修改 启动 Redis 容器 测试 启动 MySQL 容器 允许 root 用户远程访问&#xff08;%&#xff09; 初始化数据库&#xff08;可选&#xff09; RuoYi-Admin 后端服务部…