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