公平鎖非公平鎖和可重入鎖(遞迴鎖)

2021-10-10 13:11:39 字數 899 閱讀 4264

公平鎖非公平鎖

公平鎖―是指多個執行緒按照申請鎖的順序來獲取鎖,類似排隊打飯,先來後到。

非公平鎖是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖,在高併發的情況下,有可能會造成優先順序反轉或者飢餓現象

對reentrantlock而言

通過建構函式指定該鎖是否是公平鎖,預設是非公平鎖。非公平鎖的優點在於吞吐量比公平鎖大。

對於synchronized而言,也是一種非公平鎖

可重入鎖(也叫做遞迴瑣)

指的是同一執行緒外層函式獲得鎖之後,內層遞迴函式仍然能獲取該鎖的**,在同乙個執行緒在外層方法獲取鎖的時候,在進入內層方法會自動獲取鎖

也就是說,執行緒可以進入任何乙個它已經擁有的鎖所同步著的**塊。

synchronized版本

reentrantlock版本

比如房子有乙個大門,有一把瑣,雖然衛生間也有一把鎖,但是進入大門之後,就可以隨意進入衛生間

java重入鎖 公平鎖和非公平鎖

鎖的重入是指同乙個執行緒可以多次獲取同乙個鎖,synchronize是隱式的可重入鎖,reentrantlock通過 實現了鎖的重入 final boolean nofairtryacquire int acquires else if current getexclusiveownerthread...

公平鎖和非公平鎖

公平鎖和非公平鎖的不同是發生在乙個新的執行緒搶占乙個鎖的情況下。1.對於非公平鎖,當乙個新的執行緒想要得到乙個鎖,而這時鎖恰好沒有被別的執行緒占有,那麼這時候這個新的執行緒就可以無視其他執行緒在等待佇列中的排隊,而直接獲取這個鎖,而且不用先加入等待佇列。2,公平鎖,就是乙個新的執行緒想要得到乙個鎖,...

公平鎖和非公平鎖

所謂公平鎖指的是哪個執行緒先執行,那就可以先得到鎖。非公平鎖是不管執行緒是否是先執行,上來就直接嘗試占有鎖,如果嘗試失敗,就再採用類似公平鎖那種方式。我們看下reentrantlock 類的原始碼 公平鎖 protected final boolean tryacquire int acquires...