1. 程式人生 > 實用技巧 >synchronized底層原理學習

synchronized底層原理學習

在這裡插入圖片描述
這個是以sychronized修飾物件進行分析,假設使用了A物件進行加鎖,那麼A物件就是鎖,A物件包含有物件頭、資料和填充組成,其中物件頭包含Mark Word和型別指標,Mark Word會指向一個監視器物件(指向監視器的引用),,監視器物件包含有執行緒持有者和計數器等資訊。(Mark Word包括有物件的hashcode、鎖資訊、GC資訊等)

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