公平鎖與非公平鎖原始碼對比

2022-07-26 11:51:11 字數 521 閱讀 6123

語義:

1.公平鎖:每個執行緒在獲取鎖的時候,會先檢查該鎖維護的等待佇列,如果該佇列是空或者當前執行緒是第乙個,則占有鎖,否則按照fifo的原則,進入等待佇列,等待獲取鎖;

2.非公平鎖:當前執行緒在獲取鎖的時候,不管該鎖的維護佇列種是否有其它等待執行緒,直接cas,如果cas失敗,則再執行公平鎖的那一套;

原始碼比較如下:

公平鎖:

final

void

lock()

非公平鎖:

final

void

lock()

關於鎖的釋放,公平鎖與非公平鎖是一樣的:

public

final

boolean release(int

arg)

return

false

; }

關於公平鎖與非公平鎖的更底層的一些東西,比如volatile的使用,因為涉及到native方法,暫時沒有深究。

公平鎖與非公平鎖

在reentrantlock中很明顯可以看到其中同步包括兩種,分別是公平的fairsync和非公平的nonfairsync。公平鎖的作用就是嚴格按照執行緒啟動的順序來執行的,不允許其他執行緒插隊執行的 而非公平鎖是允許插隊的。預設情況下reentrantlock是通過非公平鎖來進行同步的,包括syn...

公平鎖與非公平鎖

公平鎖與非公平鎖即fairsybc和nonfairsync。簡單說一下兩個鎖的區別 顧名思義,公平就是先到先得,比如a和b執行緒均需要獲得乙個鎖,但是此時鎖正在被另乙個執行緒c佔據著,這是如果a先來b後來。那麼當c釋放鎖以後,a就會獲得這個鎖。如果是非公平的話,可能b後來但是能比a先獲得鎖。reen...

公平鎖與非公平鎖

公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖,類似排隊打飯,有先來後到。非公平鎖 是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖。在高併發的情況下,可能會造成優先順序反轉或者飢餓現象。lock lock newreentrantlock 當使用re...