3
在Java中,我們可以按照如下用鎖接口和ReentrantLock
類實現公平這是等待大多數持續時間被授予訪問鎖定。的Java Multihreading同步與鎖
任何人都可以提供詳細的如何JVM
保持長時間等待線程的軌道,即JVM
如何實現公平。
在Java中,我們可以按照如下用鎖接口和ReentrantLock
類實現公平這是等待大多數持續時間被授予訪問鎖定。的Java Multihreading同步與鎖
任何人都可以提供詳細的如何JVM
保持長時間等待線程的軌道,即JVM
如何實現公平。
詳細信息在源代碼中。
:和源代碼可以通過谷歌搜索可以找到代碼格外好評。
簡短的回答是,每個鎖都有一個等待線程隊列,它被實現爲一個鏈表。
在「公平」情況下,嘗試在隊列非空時獲取鎖的線程被添加到隊列末尾。
在「不公平」的情況下,如果鎖定當前是空閒的,則線程可以插入。這可以提供更好的性能,因爲您不需要執行需要系統調用的線程上下文切換。
*一個公平的鎖是線程獲得鎖的順序,他們要求它的順序* - ReentrantLock不會使用隊列嗎?我看了一下源代碼,'ReentrantLock'有兩個靜態類,它們擴展了'AbstractQueuedSynchronizer',在類上公平而另一個不公平。 –
@JonnyHenly正如你所說,它使用一個隊列作爲源代表。沒有魔法在繼續。 +1 –
@PeterLawrey Woohoo!我喜歡沒錯。 –