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

時間 2021-05-29 22:59:07

1樓:蘇維

這兩個東西實現的原語不一樣,一種是mutex原語,一種是monitor原語,原語決定了用途,怎麼實現反而是次要的,隨時都能改。

2樓:wuxinliulei

不能完全這麼說,因為synchronized鎖在jdk1.6之後優化為偏向鎖,輕量級鎖,重量級鎖三種形態,CAS的使用是輕量級鎖,重量級鎖的實現和CAS還不是一回事。

Synchronized是通過物件內部的乙個叫做監視器鎖(monitor)來實現的。但是監視器鎖本質又是依賴於底層的作業系統的Mutex Lock來實現的。而作業系統實現執行緒之間的切換這就需要從使用者態轉換到核心態,這個成本非常高,狀態之間的轉換需要相對比較長的時間,這就是為什麼Synchronized效率低的原因。

因此,這種依賴於作業系統Mutex Lock所實現的鎖我們稱之為「重量級鎖」。JDK中對Synchronized做的種種優化,其核心都是為了減少這種重量級鎖的使用。JDK1.

6以後,為了減少獲得鎖和釋放鎖所帶來的效能消耗,提高效能,引入了「輕量級鎖」和「偏向鎖」

Java中List String a new List 10 這種寫法的元素型別是List嗎?

代林 首先,Number b new Integer 10 並不是建立了乙個value 10的Integer,而是建立了乙個陣列,這個陣列的長度的10,且理論上只能儲存Integer。想要建立乙個value 10的Integer應該是用Number b new Integer 10 同理,List ...

關於Java中的ConcurrentHashMap的實現原理有大神可以詳細介紹下嗎?

meteor the張 1.7陣列 hashmap,cas rentrantlock 分段鎖1.8陣列 鍊錶 紅黑樹,synchronized cas 優化版的hashmap luoxn28 可以看下這個 mmwx 沒人講1.8版,那我來講講吧。1.8版本相比1.7版本,沒有了分段鎖的概念,轉而使用...

java 中Serializable存在的意義是什麼?

C加加程式設計思想 高讚確實有道理,restful架構下,json和xml會成為傳輸和持久化的主流。但是至少有下面幾個地方我們還是需要Serializable介面。1 Serializable是乙個標記。這個介面告訴JVM哪些物件可以變成byte,哪些不行。繼承介面可以幫助開發者更好地管理這些物件,...