并發(fā)編程-Condition

上一篇 <<<AQS同步器
下一篇 >>>CountDownLatch同步計(jì)數(shù)器


Condition用法

Condition底層也是基于AQS實(shí)現(xiàn)的。
Condition是一個(gè)接口,其提供的就兩個(gè)核心方法,await和signal方法。分別對(duì)應(yīng)著Object的wait和notify方法。調(diào)用Object對(duì)象的這兩個(gè)方法,需要在同步代碼塊里面,即必須先獲取到鎖才能執(zhí)行這兩個(gè)方法。同理,Condition調(diào)用這兩個(gè)方法,也必須先獲取到鎖

Condition的隊(duì)列

a.等待隊(duì)列:用于存放在lock鎖中調(diào)用await方法,當(dāng)前線(xiàn)程會(huì)變?yōu)樽枞麪顟B(tài),
同時(shí)會(huì)釋放鎖 單向鏈表存放
b.同步隊(duì)列:用于存放沒(méi)有競(jìng)爭(zhēng)到鎖,采用雙向鏈表存放。

關(guān)鍵代碼

public final void await() throws InterruptedException {
    if (Thread.interrupted())
        throw new InterruptedException();
// 將當(dāng)前節(jié)點(diǎn)添加到最后一個(gè)節(jié)點(diǎn)
    Node node = addConditionWaiter();
//釋放鎖的狀態(tài)
    long savedState = fullyRelease(node);
    int interruptMode = 0;
    while (!isOnSyncQueue(node)) {
// 如果當(dāng)前線(xiàn)程為-2 則當(dāng)前線(xiàn)程變?yōu)樽枞麪顟B(tài)
        LockSupport.park(this);
        if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
            break;
    }
//重新獲取鎖
    if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
        interruptMode = REINTERRUPT;
    if (node.nextWaiter != null) // clean up if cancelled
        unlinkCancelledWaiters();
    if (interruptMode != 0)
        reportInterruptAfterWait(interruptMode);
}
public final void signal() {
    if (!isHeldExclusively())
        throw new IllegalMonitorStateException();
//獲取單向鏈表,
    Node first = firstWaiter;
    if (first != null)
        doSignal(first);
}

相關(guān)文章鏈接:
<<<多線(xiàn)程基礎(chǔ)
<<<線(xiàn)程安全與解決方案
<<<鎖的深入化
<<<鎖的優(yōu)化
<<<Java內(nèi)存模型(JMM)
<<<Volatile解決JMM的可見(jiàn)性問(wèn)題
<<<Volatile的偽共享和重排序
<<<CAS無(wú)鎖模式及ABA問(wèn)題
<<<Synchronized鎖
<<<Lock鎖
<<<AQS同步器
<<<CountDownLatch同步計(jì)數(shù)器
<<<Semaphore信號(hào)量
<<<CyclicBarrier屏障
<<<線(xiàn)程池
<<<并發(fā)隊(duì)列
<<<Callable與Future模式
<<<Fork/Join框架
<<<Threadlocal
<<<Disruptor框架
<<<如何優(yōu)化多線(xiàn)程總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容