AQS Something

AQS:

java 鎖的核心抽象類:

主要的思想,就是 violate 的 state + cas 來模擬钙皮,加鎖 和解鎖的操作;
waiting 的列表,使用的是一個 線程隊(duì)列伏社。

不同于 synchronizer 用的是 moniter enter/exit 特殊指令; 加 mointer對象(也包含塔淤,等待隊(duì)列摘昌,當(dāng)前線程等;)
每次進(jìn)入moniter標(biāo)識的區(qū)間高蜂,就會檢查響應(yīng)對象的monitor對象聪黎,當(dāng)前線程,重入次數(shù)备恤;等待隊(duì)列等等稿饰;

======================
AQS 的思想,可以鎖基本和 moniter是一樣的喉镰。 等待列表, 計(jì)數(shù)state惭笑,當(dāng)前線程侣姆。

其中 state 的取值范圍是 0/1沉噩,代表獨(dú)占鎖蚜厉,取大于0的值的時候,代表的是共享鎖畜眨;

其中等待隊(duì)列弯囊,用來處理 公平和非公平的問題痰哨;

=======AQS 有5個抽象方法,是需要更具自己的需求去實(shí)現(xiàn)的匾嘱。
tryAcquire
tryRelease
tryAcquireShared
tryReleaseShared
isHeldExclusively

以可重入lock為例:

        protected final boolean tryAcquire(int acquires) {
            final Thread current = Thread.currentThread();
            int c = getState();
            if (c == 0) {
                if (!hasQueuedPredecessors() &&
                    compareAndSetState(0, acquires)) {
                    setExclusiveOwnerThread(current);
                    return true;
                }
            }
            else if (current == getExclusiveOwnerThread()) {
                int nextc = c + acquires;
                if (nextc < 0)
                    throw new Error("Maximum lock count exceeded");
                setState(nextc);
                return true;
            }
            return false;
        }

就是在實(shí)現(xiàn) tryAcquire斤斧;
cas 設(shè)置狀態(tài):如果 state >0, 但是當(dāng)前線程是持有鎖的線程,就計(jì)數(shù)增加霎烙;

==== 在看額countlatch撬讽,是一個典型的 shared 鎖的 機(jī)制:

       protected int tryAcquireShared(int acquires) {
            return (getState() == 0) ? 1 : -1;
        }

        protected boolean tryReleaseShared(int releases) {
            // Decrement count; signal when transition to zero
            for (;;) {
                int c = getState();
                if (c == 0)
                    return false;
                int nextc = c-1;
                if (compareAndSetState(c, nextc))
                    return nextc == 0;
            }
        }

countLatch, 初始化的時候,就把 state 設(shè)置為 比如10悬垃;
countLatch. await() 的就是嘗試獲得鎖游昼; 但是 state!=0尝蠕,肯定是獲得不到的烘豌。所以等待;
countLatch.release,就是減少state看彼,以便 await的線程能夠獲得鎖廊佩;

其他的semphare ,用state來作為permit靖榕,permit 為0 的時候無法獲取需要wait标锄,不為0 可以獲取茁计;

cyclebarrier 使用的是條件condition料皇,一個lock 可以有多個condition,我們可以做到更加靈活的singal 對應(yīng)的線程星压; 同樣適用一個變量践剂,記錄barrier的個數(shù),當(dāng)達(dá)到0的時候娜膘,signalall, 通知所有的線程舷手,同時 reseet 變量,可以重復(fù)使用劲绪,這是和 countlatch不一樣的地方;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盆赤,一起剝皮案震驚了整個濱河市贾富,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牺六,老刑警劉巖颤枪,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淑际,居然都是意外死亡畏纲,警方通過查閱死者的電腦和手機(jī)扇住,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗胀,“玉大人艘蹋,你說我怎么就攤上這事∑被遥” “怎么了女阀?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屑迂。 經(jīng)常有香客問我浸策,道長,這世上最難降的妖魔是什么惹盼? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任庸汗,我火速辦了婚禮,結(jié)果婚禮上手报,老公的妹妹穿的比我還像新娘蚯舱。我一直安慰自己,他們只是感情好昧诱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布晓淀。 她就那樣靜靜地躺著,像睡著了一般盏档。 火紅的嫁衣襯著肌膚如雪凶掰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天蜈亩,我揣著相機(jī)與錄音懦窘,去河邊找鬼。 笑死稚配,一個胖子當(dāng)著我的面吹牛畅涂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播道川,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼午衰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冒萄?” 一聲冷哼從身側(cè)響起臊岸,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尊流,沒想到半個月后帅戒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崖技,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年逻住,在試婚紗的時候發(fā)現(xiàn)自己被綠了钟哥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞎访,死狀恐怖腻贰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情装诡,我是刑警寧澤银受,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站鸦采,受9級特大地震影響宾巍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渔伯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一顶霞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锣吼,春花似錦选浑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至读恃,卻和暖如春隧膘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寺惫。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工疹吃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人西雀。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓萨驶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親艇肴。 傳聞我的和親對象是個殘疾皇子腔呜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容