看到公平和非公平兩個詞,我們就可以簡單的理解到公平與非公平的含義,公平的意思呢,就是按照排隊順序逐個來進行執行,非公平的含義呢,就是誰更霸道,就更能搶占到執行的優先。
所以我們的公平鎖,就是多個執行緒按照執行緒的申請順序,逐個獲得鎖,然後排隊執行。
優點:所有的執行緒都能得到資源。
缺點:吞吐量會下降很多,佇列裡面除了第乙個執行緒,其他的執行緒都會阻塞,cpu要重寫喚醒阻塞執行緒。
舉例說明:
可以看到,程式中建立了三個執行緒,三個執行緒按照我們的申請順序,逐個進行呼叫。
這就是公平鎖,公平鎖的建立如下:
lock l = new reentrantlock(true);
在建立鎖的基礎上輸入引數true。
而預設的不輸入引數,其實是建立了非公平鎖。
非公平鎖:
多個執行緒按照搶占的順序進行執行,搶占到了就可以執行,未搶占到則不可執行。
優點:可以減少cpu喚醒執行緒的開銷,整體的吞吐效率會提高,cpu也不必取喚醒所有執行緒,會減少喚起執行緒的數量。
缺點:可能會出現有些執行緒沒有機會得到呼叫。
公平鎖與非公平鎖
在reentrantlock中很明顯可以看到其中同步包括兩種,分別是公平的fairsync和非公平的nonfairsync。公平鎖的作用就是嚴格按照執行緒啟動的順序來執行的,不允許其他執行緒插隊執行的 而非公平鎖是允許插隊的。預設情況下reentrantlock是通過非公平鎖來進行同步的,包括syn...
公平鎖與非公平鎖
公平鎖與非公平鎖即fairsybc和nonfairsync。簡單說一下兩個鎖的區別 顧名思義,公平就是先到先得,比如a和b執行緒均需要獲得乙個鎖,但是此時鎖正在被另乙個執行緒c佔據著,這是如果a先來b後來。那麼當c釋放鎖以後,a就會獲得這個鎖。如果是非公平的話,可能b後來但是能比a先獲得鎖。reen...
公平鎖與非公平鎖
公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖,類似排隊打飯,有先來後到。非公平鎖 是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖。在高併發的情況下,可能會造成優先順序反轉或者飢餓現象。lock lock newreentrantlock 當使用re...