Synchronized和Lock的區別

2021-10-01 04:22:40 字數 743 閱讀 4256

1.原始構成

synchronized是關鍵字屬於jvm層面;

monitorenter和monitorexit(底層是通過mointor物件來完成,其實wait/notify等方法也依賴monitor物件,所以只有在同        步**塊方法中才能呼叫wait/notify等方法)

lock是具體的類時api層面鎖;

2.使用方法

synchronized不需要使用者手動釋放鎖,當synchronized**執行完成後系統會自動讓執行緒釋放對鎖的占用;

reentrantlock則需要手動去釋放鎖,如果沒有手動釋放鎖就可能導致出現死鎖現象;

需要lock()和unlock()方法配合try/finally語句塊來完成

3.等待是否可中斷

synchronized不可中斷,除非丟擲異常或者正常執行完成

reentrantlock可中斷,1.設定超時時間trylock(long timeout,timeunit unit),2.lockinterruptibly()放**塊中,呼叫    interrup()方法

4.加鎖是否公平

synchronized非公平鎖

reentrantlock兩者都可以,預設非公平鎖,建構函式傳true即為公平鎖

5.鎖繫結多個條件的condition

synchronized沒有,要麼只喚醒乙個,要麼所有都喚醒,不能精準喚醒

reentrantlock通過condition可以實現精準喚醒某個執行緒

lockInterruptibly和lock的區別

size medium lock 拿不到lock就不罷休,不然執行緒就一直block。lockinterruptibly會優先響應執行緒中斷,處理響應的方式是丟擲interruptedexception。size 可以從原始碼看出來的 private void doacquireinterrupti...

synchronized和volatile的區別?

一旦乙個共享變數 類的成員變數 類的靜態成員變數 被volatile修飾之後,那麼就具備了兩層語義 1 保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是 立即可見的。2 禁止進行指令重排序。volatile本質是在告訴jvm當前變數在暫存器 工作...

synchronized和volatile的區別

volatile關鍵字的本質是告訴jvm,該變數在暫存器中的值是不確定的,需要在主存中讀取,而synchronized關鍵字是鎖住當前變數,只有當前執行緒可以訪問,其他執行緒等待。volatile關鍵字的作用 保證變數的可見性和防止指令重排序。1.volatile只能作用於變數,而synchroni...