從原始碼分析ConcurrentHashMap執行緒安全和高效的特性
在IDEA裡面通過ctrl+n搜尋ConcurrentHashMap類
這樣就得到了ConcurrentHashMap類的原始碼
再在這個類中通過ctrl+f12查詢類中的方法put
在put方法裡分析原始碼看它為什麼可以實現執行緒安全而又高效
在put方法裡可以看到它呼叫了putVal方法
所以需要再到putVal方法裡去檢視
(最後一句tab = helpTransfer是在給儲存hash碼值的陣列tab擴容)
cas演算法
拿期望值去比較要替換的變數
如果一樣 就把新值替換上去
如果不一樣 就不進行替換
因為當沒有人在動要替換的變數時 期望值和要替換的那個變數將會是一樣的 反之說明有人在動這個變數 如果進行替換則會產生執行緒安全的問題
沒有替換成功 將會進行迴旋 再取替換的變數進行和期望值的比較 直至一樣進行替換
即在別人改完後再進行替換 就不會有執行緒安全的問題
通過這個演算法實現執行緒安全
繼續往下看
它針對對應一個hash碼值的連結串列或者紅黑樹進行上鎖
而不是針對所有hash碼值的所有連結串列或紅黑樹上鎖 即分段上鎖
通過這種方式實現高效而且執行緒安全
相關文章
- ConcurrentHashMap執行緒安全機制以及原始碼分析HashMap執行緒原始碼
- ConcurrentHashMap執行緒安全嗎?HashMap執行緒
- ConcurrentHashMap原始碼解析,多執行緒擴容HashMap原始碼執行緒
- 【Java】ConcurrentHashMap執行緒安全技巧JavaHashMap執行緒
- 多執行緒高併發程式設計(10) -- ConcurrentHashMap原始碼分析執行緒程式設計HashMap原始碼
- ConcurrentHashMap一定執行緒安全?HashMap執行緒
- 執行緒池原始碼分析執行緒原始碼
- ConcurrentHashMap的size方法是執行緒安全的嗎?HashMap執行緒
- 從原始碼的角度解析執行緒池執行原理原始碼執行緒
- ConcurrentHashMap 原始碼分析HashMap原始碼
- Python執行緒池ThreadPoolExecutor原始碼分析Python執行緒thread原始碼
- Dubbo RPC執行緒模型 原始碼分析RPC執行緒模型原始碼
- 執行緒池之ScheduledThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 執行緒池之ThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 從原始碼角度分析建立執行緒池究竟有哪些方式原始碼執行緒
- ConcurrentHashMap 實現原理和原始碼分析HashMap原始碼
- hashmap和concurrenthashmap原始碼分析(1.7/1.8)HashMap原始碼
- 原始碼|從序列執行緒封閉到物件池、執行緒池原始碼執行緒物件
- 執行緒池的建立和使用,執行緒池原始碼初探(篇一)執行緒原始碼
- Java多執行緒之Thread原始碼分析Java執行緒thread原始碼
- 多執行緒十二之ConcurrentHashMap1.8實現分析執行緒HashMap
- libgo原始碼分析之多執行緒協程管理和排程Go原始碼執行緒
- 詳解Java執行緒池的ctl(執行緒池控制狀態)【原始碼分析】Java執行緒原始碼
- 程式碼審查:從 ArrayList 說執行緒安全執行緒
- 什麼是執行緒安全和執行緒不安全執行緒
- Java排程執行緒池ScheduledThreadPoolExecutor原始碼分析Java執行緒thread原始碼
- jdk1.8 執行緒池部分原始碼分析JDK執行緒原始碼
- 多執行緒基礎(十九):Semaphore原始碼分析執行緒原始碼
- 從原始碼角度解析執行緒池中頂層介面和抽象類原始碼執行緒抽象
- 比特幣原始碼分析:多執行緒檢查指令碼比特幣原始碼執行緒指令碼
- 【高併發】從原始碼角度分析建立執行緒池究竟有哪些方式原始碼執行緒
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- 解讀Java8中ConcurrentHashMap是如何保證執行緒安全的JavaHashMap執行緒
- 使用 Executors,ThreadPoolExecutor,建立執行緒池,原始碼分析理解thread執行緒原始碼
- JUC(4)---java執行緒池原理及原始碼分析Java執行緒原始碼
- Netty原始碼分析之Reactor執行緒模型詳解Netty原始碼React執行緒模型
- 從簡單程式碼入手,分析執行緒池原理執行緒
- [10]elasticsearch原始碼深入分析——執行緒池的封裝Elasticsearch原始碼執行緒封裝