并發容器小結及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
英文地址,請注明出處:http://en.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 后端服務部…