synchronized底層原理學習

2021-10-24 23:16:12 字數 421 閱讀 4546

這個是以sychronized修飾物件進行分析,假設使用了a物件進行加鎖,那麼a物件就是鎖,a物件包含有物件頭、資料和填充組成,其中物件頭包含mark word和型別指標,mark word會指向乙個監視器物件(指向監視器的引用),,監視器物件包含有執行緒持有者和計數器等資訊。(mark word包括有物件的hashcode、鎖資訊、gc資訊等)

當線計數器為0時(或者通過a物件的mark word中的鎖資訊[無鎖狀態]),執行緒a獲取到鎖,計數器會進行+1,同理,離開時會進行減1,下乙個執行緒獲取鎖時檢測是不是有執行緒持有鎖了或者持有鎖的執行緒是當前執行緒(檢測鎖狀態資訊以及監視器的執行緒持有者),若沒有別的執行緒獲取或者本來就持有,那就獲取到鎖,往下執行。否則進入阻塞佇列。

ConcurrentHashMap底層原理

出自jdk5新引進的concurrent包,concurrenthashmap主要解決了兩個問題 相較於只使用synchronized的hashtable提高了效能,根據具體場景進行不同的設計,盡量避免了重量級鎖。不同於hashmap,採用了fail safe弱一致性迭代器,再迭代器使用過程中,可以...

synchronized底層實現原理(保證看懂)

首先那些說看過synchronized原始碼的基本都是大聰明,synchronized根本點不進去,想弄懂它的實現原理,我們只能通過看編譯好的位元組碼檔案 整個測試類 public class synchronizedtest 位元組碼檔案 怎麼看?idea view show bytecode 再...

synchronized底層實現原理及鎖優化

一 概述 1 synchronized作用 原子性 synchronized保證語句塊內操作是原子的 可見性 synchronized保證可見性 通過 在執行unlock之前,必須先把此變數同步回主記憶體 實現 有序性 synchronized保證有序性 通過 乙個變數在同一時刻只允許一條執行緒對其...