共享式獲取同步狀態,與獨佔式的區別在於同一時刻有多個執行緒獲取同步狀態;
//共享式獲取同步狀態,與獨佔式的區別在於同一時刻有多個執行緒獲取同步狀態;
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...