synchronized和Lock的區別

2021-10-09 19:37:08 字數 937 閱讀 4541

開局一張圖:

1.lock是乙個介面,synchronized是乙個關鍵字。

2.異常是否釋放鎖:

synchronized在發生異常時會自動釋放占有的鎖,所以不會出現死鎖。

lock發生異常時,不會主動釋放占有的鎖,必須手動unlock,可能出現死鎖。(所以最好將同步**塊用try catch包起來,在 finally中呼叫unlock釋放鎖)

ps:為什麼會產生死鎖及死鎖的必要條件

3.是否響應中斷:

lock等待鎖的過程中可以用 interrupt 來中斷等待。

synchronized只能等待鎖的釋放,不能響應中斷。

4.是否知道有沒有獲取鎖:

lock可以通過trylock方法知道有沒有獲取鎖,返回true就是獲取到了鎖。

synchronized不知道。

5.lock可以提高多個執行緒進行讀操作的效率(通過readwritelock實現讀寫分離)。

6.效能上:

當有大量執行緒同時競爭時,lock效能遠優於synchronized。

//lock基本用法

lock lock = new reetrantlock();

lock.lock();//獲取鎖

lock.trylock();//嘗試獲取鎖,返回true證明獲取到了鎖

condition condition = lock.newcondition();

condition.await();//讓執行緒進入等待

condition.signal();//喚醒等待的執行緒

condition.signalall();//喚醒全部執行緒

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...