隱式鎖與顯式鎖詳細對比

2021-10-07 05:17:26 字數 1896 閱讀 9922

synchronized修飾的物件,該物件就是隱式鎖,例子如下

public

static

void

main

(string[

] args)

static

class

ticket

implements

runnable

catch

(interruptedexception e)

count--

; system.out.

println

("餘票"

+ count+thread.

currentthread()

.getname()

);}else}}

}}

還有同步方法也就是synchronized修飾的方法,該方法就是隱式鎖.例子如下

public

static

void

main

(string[

] args)

static

class

ticket

implements

runnable}}

public

synchronized

boolean

sale()

catch

(interruptedexception e)

count--

; system.out.

println

("餘票"

+ count + thread.

currentthread()

.getname()

);return

true;}

return

false;}

}

顯示鎖是由lock類定義的鎖,更符合物件導向,有上鎖,解鎖的步驟

public

static

void

main

(string[

] args)

static

class

ticket

implements

runnable

catch

(interruptedexception e)

count--

; system.out.

println

("餘票"

+ count + thread.

currentthread()

.getname()

);}else

} l.

unlock()

;}}

了解了隱式鎖和顯示鎖,那麼他們區別在哪

公平鎖與非公平鎖: synchronized是非公平鎖,其實除了lock類設定為公平鎖以外都是非公平鎖,他們選擇下乙個執行緒是隨機就近進入,搶占式的方式,而lock類鎖傳true設定後是按執行緒申請順序排隊進入

synchronized底層依賴於軟體層面上的jvm,而lock類依賴於特殊的cpu指定,可以認為不受jvm的約束,並可以通過其他語言平台來完成底層的實現。在併發量較小的多執行緒應用程式中,lock類與synchronized效能相差無幾,但在高併發量的條件下,synchronized效能會迅速下降幾十倍,而reentrantlock的效能卻能依然維持乙個水準,因此我們建議在高併發量情況下使用reentrantlock。

lock是可以中斷鎖,synchronized是非中斷鎖,必須等待執行緒執行完成釋放鎖

總的來說lock可以使用讀鎖提高多執行緒讀效率,更直觀方便

顯式鎖與隱式鎖的區別

解決的方法 格式描述 同步 塊 關鍵字 synchronized 鎖物件 隱式鎖,多個執行緒的鎖物件必須唯一 同步方法 修飾符 synchronized 返回型別 方法名 隱式鎖,誰呼叫該方法誰就是鎖物件 顯示鎖reentrantlock類的lock unlock 方法 顯式鎖,有程式設計師決定在那...

mysql隱式鎖 innodB的隱式鎖

一 知識準備之隱式鎖 innodb 實現了乙個延遲加鎖的機制,來減少加鎖的數量,在 中稱為隱式鎖 implicit lock 隱式鎖中有個重要的元素,事務id trx id 隱式鎖的邏輯過程如下 a.innodb的每條記錄中都乙個隱含的trx id欄位,這個字段存在於簇索引的b tree中。b.在操...

mysql顯式和隱式效率 顯式與隱式SQL連線

顯式和隱式內部聯接是否存在效率差異?例如 select from table a inner join table b on a.id b.id 與select a.b.from table a,table b where a.id b.id 在mysql 5.1.51上,兩個查詢的執行計畫相同 m...