AQS(三) 共享鎖

2021-09-26 18:32:19 字數 1083 閱讀 6192

共享式獲取同步狀態,與獨佔式的區別在於同一時刻有多個執行緒獲取同步狀態;

//共享式獲取同步狀態,與獨佔式的區別在於同一時刻有多個執行緒獲取同步狀態;

void acquireshared(int arg);

//在acquireshared方法基礎上增加了能響應中斷的功能;

void acquiresharedinterruptibly(int arg);

//在acquiresharedinterruptibly基礎上增加了超時等待的功能;

boolean tryacquiresharednanos(int arg, long nanostimeout)

//共享式釋放同步狀態

boolean releaseshared(int arg)

//獲取共享鎖

public final void acquireshared(int arg)

//private void doacquireshared(int arg)

}//這裡與獨佔鎖一致

//獲取鎖失敗,執行緒進入等待狀態,等待獲取獨佔式鎖

if (shouldparkafte***iledacquire(p, node) &&

parkandcheckinterrupt())

interrupted = true;

}} finally

}private void setheadandpropagate(node node, int propagate)

}

public final boolean releaseshared(int arg) 

return false;

}private void doreleaseshared()

else if (ws == 0 &&

!compareandsetwaitstatus(h, 0, node.propagate))

continue;

}if (h == head)// head發生變化

break;

}}

AQS共享鎖的實現原理

前面的文章lock的實現中分析了aqs獨佔鎖的實現原理,那麼接下來就分析下aqs是如何實現共享鎖的。共享鎖的介紹 共享鎖 同一時刻有多個執行緒能夠獲取到同步狀態。那麼它是如何做到讓多個執行緒獲取到同步狀態呢?來看一下獲取共享鎖的過程 1.執行緒呼叫aqs的acquireshared 申請獲取鎖 可有...

AQS共享鎖應用之Semaphore原理

我們呼叫semaphore方法時,其實是在間接呼叫其內部類或aqs方法執行的。semaphore類結構與reetrantlock類相似,內部類sync繼承自aqs,然後其子類fairsync和nofairsync分別實現公平鎖和非公平鎖的獲取鎖方法tryacquireshared int arg 而...

深入淺出AQS之共享鎖模式

在了解了aqs獨佔鎖模式以後,接下來再來看看共享鎖的實現原理。搞清楚aqs獨佔鎖的實現原理之後,再看共享鎖的實現原理就會輕鬆很多。兩種鎖模式之間很多通用的地方本文只會簡單說明一下,就不在贅述了,具體細節可以參考我的上篇文章深入淺出aqs之獨佔鎖模式 一 執行過程概述 獲取鎖的過程 當執行緒呼叫acq...