Java併發之公平鎖

2021-09-19 19:02:38 字數 631 閱讀 6998

cpu在排程執行緒的時候,會在等待佇列裡隨機挑選乙個執行緒。由於隨機性,故不能保證執行緒先到先得(synchronized控制的鎖就是這種非公平鎖)。這樣就會產生飢餓現象,即有些優先順序較低的執行緒可能永遠無法取得cpu的執行權,優先順序較高的執行緒會不斷搶占資源。於是,就有了公平鎖。

公平鎖可以保證執行緒按照時間順序執行,避免飢餓現象的產生。但是公平鎖的效率很低,因為要保證順序執行,就得維護乙個有序佇列。

reentrantlock便是公平鎖,通過在構造方法中傳入true就是公平鎖,傳入false就是非公平鎖。當然,預設false

public

reentrantlock

(boolean fair)

使用公平鎖實現效果:

public

class

lockfairtest

implements

runnable

finally}}

public

static

void

main

(string [

]args)

}

結果應該顯而易見了,兩個執行緒交替執行。

Java併發面試問題之公平鎖與非公平鎖

非公平鎖 注意一點,此時執行緒2可還停留在等待佇列裡啊,還沒開始嘗試重新加鎖呢!然而,不幸的事情發生了,這時半路殺出個程咬金,來了乙個執行緒3!執行緒3突然嘗試對reentrantlock發起加鎖操作,此時會發生什麼事情?很簡單!執行緒2還沒來得及重新嘗試加鎖呢。也就是說,還沒來得及嘗試重新執行ca...

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

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

java並發包中的公平鎖與非公平鎖有啥區別

注意一點,此時執行緒2可還停留在等待佇列裡啊,還沒開始嘗試重新加鎖呢!然而,不幸的事情發生了,這時半路殺出個程咬金,來了乙個執行緒3!執行緒3突然嘗試對reentrantlock發起加鎖操作,此時會發生什麼事情?很簡單!執行緒2還沒來得及重新嘗試加鎖呢。也就是說,還沒來得及嘗試重新執行cas操作將s...