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

2021-10-18 19:23:28 字數 705 閱讀 8136

首先那些說看過synchronized原始碼的基本都是大聰明,synchronized根本點不進去,想弄懂它的實現原理,我們只能通過看編譯好的位元組碼檔案

整個測試類

public

class

synchronizedtest

}}

位元組碼檔案(怎麼看?? idea => view => show bytecode)

再來說原理:

基於物件的監視器(objectmonitor),我們在位元組碼檔案裡面可以看到,在同步方法執行前後,有兩個指令,進入同步方法前monitorenter,方法執行完成後monitorexit;

我的理解是物件都有乙個監視器objectmonitor,這個監視器內部有很多屬性,比如當前等待執行緒數、計數器、當前所屬執行緒等;其中計數器屬性就是用來記錄是否已被執行緒占有,方法執行到monitorenter時,計數器+1,執行到monitorexit時,計數器-1,執行緒就是通過這個計數器來判斷當前鎖物件是否已被占用(0為未占用,此時可以獲取鎖);

補充:乙個synchronize鎖會有兩個monitorexit,這是保證synchronize能一定釋放鎖的機制,乙個是方法正常執行完釋放,乙個是執行過程發生異常時虛擬機器釋放;

synchronized底層原理學習

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

ConcurrentHashMap底層實現

concurrenthashmap融合了hashtable和hashmap二者的優勢 hashtable是做了同步的,hashmap沒有同步,所以hashmap在單執行緒情況下效率高,hashtable在多執行緒情況下,同步操作能保證程式執行的正確性 但是hashtable每次同步執行都要鎖住整個結...

synchronized底層實現原理及鎖優化

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