JavaEE——多線程中的哈希表

目錄

  • 前言
  • 1.HashTable
  • 2.ConcurrentHashMap
  • 總結

前言

在使用多線程前,我們用HashMap類來創建哈希表,但這個類線程不安全,在這篇文章,我們將介紹多線程環境的哈希表,將會講述HashTable, HashMap, ConcurrentHashMap這三個類的主要區別。

1.HashTable

HashTable實際上就是線程安全的HashMap,兩者的功能十分相似,只是HashTable會在代碼一些關鍵地方進行加鎖,比如看其中的get方法:
在這里插入圖片描述
HashTable雖然是線程安全的類,但已經不推薦使用了,我們目前主流使用的就是接下來要提到的ConcurrentHashMap。

2.ConcurrentHashMap

ConcurrentHashMap是針對多線程場景專門優化的一個哈希表,使用方法和普通的哈希表一樣。

ConcurrentHashMap<Integer, String> map = new ConcurrentHashMap<>();

ConcurrentHashMap,對比于HashTable,最大的調整是針對鎖的粒度進行了優化,上面可以看到,HashTale針對this進行加鎖,如果進行操作,針對任何一個進程,都會對整個哈希表觸發鎖競爭。

而ConcurrentHashMap上,對哈希表上的每一個鏈表都提供了一個鎖。也就是說,在針對哈希表中同一個鏈表的修改才會引入阻塞。這樣的方案使競爭更小。

此外ConcurrentHashMap采取了原子類的放哪,基于CAS操作來針對size進行變更。

在ConcurrentHashMap擴容的時候,不會把所有鍵值對都搬運到更大的數組上,每次只運一部分,來確保單次搬運的速度足夠快,使鎖的持有時間足夠短,減少開銷。具體是每次進行get,put,remove等操作時,都會搬運一部分。

總結

本篇文章講述了HashTable, HashMap, ConcurrentHashMap的主要區別,其中ConcurrentHashMap的區別最多,優化最好,需要著重進行理解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89801.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89801.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89801.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis Plus SQL性能分析:從日志到優化的全流程實戰指南

引言 在Java開發的江湖里&#xff0c;MyBatis Plus&#xff08;MP&#xff09;早已是“效率利器”——它用極簡的API封裝了CRUD操作&#xff0c;讓開發者從重復的SQL編寫中解放出來。但隨著項目數據量從“萬級”躍升至“十萬級”“百萬級”&#xff0c;一個尷尬的現實逐漸浮現&…

備忘錄設計模式

備忘錄模式&#xff08;Memento Pattern&#xff09;是一種行為設計模式&#xff0c;用于捕獲對象的內部狀態并在需要時恢復該狀態&#xff0c;同時不破壞對象的封裝性。它適用于需要實現撤銷/重做、歷史記錄或狀態快照的場景。核心組件Originator&#xff08;原發器&#xff0…

【世紀龍科技】智能網聯汽車環境感知系統教學難題的創新實踐?

在職業院校智能網聯汽車專業教學中&#xff0c;環境感知系統的教學長期面臨三大核心挑戰&#xff1a;設備成本高昂導致實訓資源不足、抽象原理難以直觀呈現、傳統教學模式難以滿足產業需求。如何讓學生在有限的教學條件下&#xff0c;深入理解激光雷達、毫米波雷達等核心部件的…

ES vs Milvus vs PG vector :LLM時代的向量數據庫選型指南

互聯網時代&#xff0c;關系型數據庫為王。相應的&#xff0c;我們的檢索方式也是精確匹配查詢為主——查找特定的用戶ID、商品編號或訂單狀態。但AI時代&#xff0c;語義檢索成為常態&#xff0c;向量數據庫成為搜索推薦系統&#xff0c;大模型RAG落地&#xff0c;自動駕駛數據…

磁盤陣列技術的功能與分類

磁盤陣列技術 磁盤陣列是由多臺磁盤存儲器組成的一個快速、大容量、高可靠的外存子系統。現在常見的磁盤陣列稱為廉價冗余磁盤陣列&#xff08;Redundant Array of Independent Disk,RAID)。目前&#xff0c;常見的 RAID 如下所示。 廉價冗余磁盤陣列 RAID級別 RAID-0是一種不具…

SpringMVC核心注解:@RequestMapping詳解

概述RequestMapping是SpringMVC中最核心的注解之一&#xff0c;用于將HTTP請求映射到MVC和REST控制器的處理方法上。基本功能RequestMapping主要用于&#xff1a;映射URL到控制器類或方法定義請求方法類型&#xff08;GET、POST等&#xff09;定義請求參數、請求頭等條件使用位…

【雜談】硬件工程師怎么用好AI工具做失效分析

最近被派到國外出差了&#xff0c;工作任務比較重&#xff0c;所以更新的頻率比較低。但在出差工作的過程中&#xff0c;我發現在失效分析時&#xff0c;有相當多的時間做的是比較重復的工作。比如失效分析肯定要一些證據如圖片、視頻。當我們做多臺設備的失效分析時&#xff0…

MyBatis詳解以及在IDEA中的開發

MyBatis概述 MyBatis是一個優秀的持久層框架&#xff0c;它支持定制化SQL、存儲過程以及高級映射。MyBatis避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集的過程。 核心特點 優勢&#xff1a; SQL語句與Java代碼分離&#xff0c;便于維護支持動態SQL&#xff0c;靈活性…

LangGraph教程6:LangGraph工作流人機交互

文章目錄 Human-in-the-loop(人機交互) interrupt Warning Human-in-the-loop(人機交互) 人機交互(或稱“在循環中”)工作流將人類輸入整合到自動化過程中,在關鍵階段允許決策、驗證或修正。這在基于 LLM 的應用中尤其有用,因為基礎模型可能會產生偶爾的不準確性。在合規、…

Linux部署Milvus數據庫及Attu UI工具完全指南

一、準備工作1.1 環境要求操作系統&#xff1a;Ubuntu 20.04/Debian 11/CentOS 7硬件配置&#xff1a;至少8GB內存&#xff0c;4核CPU&#xff0c;50GB磁盤空間網絡要求&#xff1a;可訪問互聯網&#xff08;用于拉取Docker鏡像&#xff09;1.2 安裝Docker和Docker Compose1.2.…

開疆智能Profinet轉ModbusTCP網關連接康耐視InSight相機案例

相機配置&#xff1a;硬件連接部分可以查詢我的博客&#xff1a;點擊 這里不做說明。在電子表格視圖下&#xff0c;點擊菜單 “傳感器–網絡設置”&#xff1a;選擇工業協議&#xff0c;如圖。保存作業&#xff0c;并按照提示重啟相機。3. 相機的控制/狀態字&#xff1a;上圖中…

BERT技術架構

### **一、整體定位&#xff1a;純編碼器架構**#### **核心設計思想**> **預訓練微調**&#xff1a;> 1. **預訓練**&#xff1a;在海量無標簽文本上學習通用語言規律> 2. **微調**&#xff1a;用少量標注數據適配具體任務&#xff08;如分類/問答&#xff09;> **…

Python+ArcGIS+AI蒸散發與GPP估算|Penman-Monteith模型|FLUXNET數據處理|多源產品融合|專業科研繪圖與可視化等

結合Python編程與ArcGIS工具&#xff0c;通過AI輔助方法實現蒸散發與植被總初級生產力估算。學習國際流行的Penman-Monteith模型&#xff0c;掌握數據獲取、處理、分析和可視化全流程&#xff0c;培養生態水文與雙碳領域的實踐應用能力。通過DeepSeek、豆包等AI工具輔助代碼編寫…

elasticsearch+logstash+kibana+filebeat實現niginx日志收集(未過濾日志內容)

單點部署 環境準備 基于Rocky9虛擬機&#xff0c;內存大小為4G yum -y install lrzsz useradd elkf passwd elkf#密碼隨意su - elk rz 導入包&#xff0c;筆者導使用版本為7.17.8下載地址&#xff1a;https://www.elastic.co/downloads/past-releases/ tar -xf elasticsearch-7…

hadoop 集群問題處理

1.1.JournalNode 的作用在 HDFS HA 配置中&#xff0c;為了實現兩個 NameNode 之間的狀態同步和故障自動切換&#xff0c;Hadoop 使用了一組 JournalNode 來管理共享的編輯日志。具體來說&#xff0c;JournalNode 的主要職責包括&#xff1a;共享編輯日志&#xff1a;JournalNo…

LeetCode--46.全排列

解題思路&#xff1a;1.獲取信息&#xff1a;給定一個不含重復數字的數組&#xff0c;返回所有可能的全排列&#xff0c;可以按任意順序返回提示信息&#xff1a;1 < nums.length < 6-10 < nums[i] < 102.分析題目&#xff1a;要獲取到所有可能的全排列我們每次會從…

云徙科技----一面(全棧開發)

一、公司是做什么業務的&#xff1f;二、介紹一下自己會用的&#xff0c;熟悉的技術棧&#xff1f;三、“在 Spring 應用中&#xff0c;當你發起一個 RESTful API 請求時&#xff08;例如 GET /api/users/1&#xff09;&#xff0c;計算機系統是如何知道這個請求的&#xff1f;…

我是怎么設計一個訂單號生成策略的(庫存系統)

我是怎么設計一個訂單號生成策略的&#xff08;庫存系統&#xff09;一、背景 最近我在做一套自研的庫存管理系統&#xff0c;其中有一個看似簡單、實則很關鍵的功能&#xff1a;訂單號生成策略。 訂單號不僅要全局唯一&#xff0c;還要有一定的可讀性和業務含義&#xff0c;比…

問津集 #1:Rethinking The Compaction Policies in LSM-trees

文章目錄引言正文結束語引言 陪女朋友出門&#xff0c;我大概有兩個小時左右的空閑時間&#xff0c;遂帶上電腦&#xff0c;翻了下論文列表&#xff0c;選擇了這篇文章做一個簡讀。 因為這一年負責時序系統的存儲引擎和計算引擎演進&#xff0c;而Compaction又是串聯讀寫的核心…

數據產品結構:從數據接入到可視化的完整架構指南

在數據驅動決策的時代&#xff0c;一套高效的數據產品結構是企業挖掘數據價值的基礎。無論是巨頭企業自建的完整體系&#xff0c;還是中小企業依賴的第三方工具&#xff0c;其核心邏輯都是實現 “數據從產生到呈現” 的全鏈路管理。本文將拆解數據產品的五層架構&#xff0c;對…