共享鎖的釋放是通過調用releaseShared模版方法來實作的。大概步驟為:
調用tryReleaseShared嘗試釋放共享鎖,這裡必須實作為線程安全。
如果釋放了鎖,那麼調用doReleaseShared方法環迅後繼結點,實作喚醒的傳播。
對于支援共享式的同步元件(即多個線程同時通路),它們和獨占式的主要差別就是tryReleaseShared方法必須確定鎖的釋放是線程安全的(因為既然是多個線程能夠通路,那麼釋放的時候也會是多個線程的,就需要保證釋放時候的線程安全)。由于tryReleaseShared方法也是我們自己實作的,是以需要我們自己實作線程安全,是以常常采用CAS的方式來釋放同步狀态。
/**
- 共享模式下釋放鎖的模版方法。
-
,如果成功釋放則會調用
*/
public final boolean releaseShared(int arg) {
//tryReleaseShared釋放指鎖
if (tryReleaseShared(arg)) {
//釋放成功,必定調用doReleaseShared嘗試喚醒後繼結點
doReleaseShared();
return true;
}
return false;
}
本文來源于:奈學開發者社群,如有侵權,請聯系我删除~