synchronized鎖定的到底是什麼?

時間 2021-05-11 14:44:46

1樓:

建議看一下UNIX程式設計。

如果學過UNIX 多執行緒, 那麼就應該能理解。 synchronized 說到底就是一把鎖。相當於訊號量的操作,用於同步互斥。

2樓:徐辰

每個object有乙個monitor,這東西其實就是個recursive lock,呼叫synchronized方法或者進入synchronized block的時候,當前thread就會嘗試獲取這個recursive lock,如果這個lock當前沒有owner或者owner就是當前thread,則monitor的owner設為當前thread並且的鎖定計數加一,否則當前thread就會一直等待到鎖被釋放,當退出sychronized block的時候鎖定計數減一,減至0則釋放鎖。

如果是static synchronized方法,鎖定的物件是它所屬的那個class,因為在JVM裡class本身也是個物件。

具體實現中可能有一些優化但原理上大致就是這麼個東西。

3樓:陳焱焱

鎖的是物件,但只是在鎖修飾的那個方法中檢查物件是否被鎖住,所以如果你都修飾就會按鎖的順序執行,如果有沒有鎖修飾的話就不會檢查,鎖住的就按照鎖住的執行,沒鎖的就該怎麼執行怎麼執行

然後順序的問題是因為你是用main執行緒執行A方法,子執行緒執行run方法,所以時間執行順序就看它們誰執行的快,但一般main是直接繼續執行,子執行緒還要從就緒轉成執行狀態,所以main執行緒會快一點

Java中synchronized鎖和Lock鎖在CPU層的實現,或者說在JVM層的實現是否是一致的?

蘇維 這兩個東西實現的原語不一樣,一種是mutex原語,一種是monitor原語,原語決定了用途,怎麼實現反而是次要的,隨時都能改。 wuxinliulei 不能完全這麼說,因為synchronized鎖在jdk1.6之後優化為偏向鎖,輕量級鎖,重量級鎖三種形態,CAS的使用是輕量級鎖,重量級鎖的實...

synchronized 鎖公升級過程中偏向鎖如何公升級?

陸萌萌 其實文章裡已經寫得非常明白了。執行緒1先獲取偏向鎖,記錄執行緒id,執行緒2來啦,通過cas修改執行緒id,失敗 我想問為什麼失敗,cas修改是什麼意思 這裡你需要去補一補關於CAS的知識,簡單來說,CAS的邏輯是 注意是邏輯,實際不是這麼實現的 private static intnum ...

無鎖定遊戲有什麼玄虛?

小白 主要的差別在於,鎖定類的遊戲裝備不行任你操作超神也是沒法打,但是無鎖定的遊戲是可以靠操作在一定程度上抹平裝備的劣勢,大神級的玩家甚至可以靠走位和無敵技能無傷擊殺boss,裝備差點操作過硬也是能打。總之就是可以秀操作。另外一點,就是無鎖定的遊戲一定程度上會模糊傳統的T 奶 輸出這種副本模式,缺了...