synchronized與Lock的區別聯絡

2021-09-29 07:47:58 字數 731 閱讀 2318

聯絡:

synchronized和重入鎖 reentrantlock都有重入性:同乙個執行緒進入一次則鎖的計數器加一,當鎖的計數器為0時才能釋放鎖

區別:synchronized 是關鍵字,reentrantlock是類

機制:synchronized操作mark word ,lock操作unsafe類的park()方法。

synchronized 由編譯器自動加鎖釋放鎖,而重入鎖需要使用者手動加鎖釋放鎖,因此必須保證lock和unlock同步出現

synchronized 的實現是基於jvm層面,reentranlock則基於jdk實現,可以閱讀原始碼。

synchronized 不能相應中斷,重入鎖可以響應中斷

synchronized 不能設定多個等待條件, 重入鎖可以設定獲取鎖的等待時間避免死鎖

重入鎖可以嘗試獲取鎖,synchronized不能設定嘗試獲取鎖。

重入鎖可以通過分組喚醒需要喚醒的執行緒,synchronized要麼隨機喚醒要麼全部喚醒

重入鎖可以設定公平鎖與非公平鎖,而synchronized是非公平鎖。

synchronized與lock的區別

synchronized是關鍵字,lock是乙個介面,synchronized可以鎖**塊和鎖方法,對普通方法和**塊同步是鎖的物件,修飾靜態方法是對類加鎖 ,synchronized是使用monitor進行同步,加鎖時如果monitor計數器不為0,則會繼續搶占鎖,為0則將計數器置為1,然後獲取鎖.

synchronized與volatile關鍵字

volatile保證其他執行緒對這個變數操作時是立即可見的,即操作的是從記憶體中讀取的最新值 無法保證原子性 只能修飾變數 public class test public static void main string args throws exception start 控制台輸出 使用場景 ...

執行緒與併發 synchronized

多執行緒與高併發 當我們對乙個數字進行遞增操作時,如果兩個程式同時訪問,第乙個執行緒讀到count 0,並對其 1,在自己執行緒內部的記憶體裡還沒有寫回去的時候 第二個執行緒讀到的count也是0,並 1寫回去 但是程式明明對count進行了兩次 1操作,但結果還是1。那麼我們對這個遞增過程加上一把...

synchronized與鎖公升級

當乙個共享資源有可能被多個執行緒同時訪問並修改的時候,需要用鎖來保證資料的正確性。請看下圖 執行緒a和執行緒b分別往同乙個銀行賬戶裡面新增貨幣,a執行緒從記憶體中讀取 read 當前賬戶金額 0 到執行緒a的本地棧,進行 100的操作後,這時b執行緒也從記憶體中讀取當前金額 0 到執行緒b的本地棧,...