AQS-ConditionObject 笔记

简介: AQS-ConditionObject 笔记

ConditionObject

属性 说明
Node firstWaiter 头节点
Node lastWaiter 尾节点

为Condition接口实现,Condition的目的主要是替代Object的wait,notify,notifyAll方法的,它是基于Lock实现的.(而Lock是来替代synchronized方法).

结构

ConditionObject队列结构.png

使用时序图

AQS-Condition-使用流程.png


关键方法

阻塞线程:await

对应Object.wait(),通过AQS机制释放锁定的资源,终止当前线程,恢复后使用AQS独占模式重新锁定资源

acquireQueued:此时node节点已转换为AQS中节点

public final void await() throws InterruptedException {
    if (Thread.interrupted())
        throw new InterruptedException();
    Node node = addConditionWaiter();
    long savedState = fullyRelease(node);
    int interruptMode = 0;
    while (!isOnSyncQueue(node)) {
        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);
}

AQS-Condition-await.png

唤醒线程:signal

transferForSignal转换节点后await()中acquireQueued(node,savedState)操作的节点已是AQS中的节点

isHeldExclusively:子类实现.判断是否独家持有

public final void signal() {
    if (!isHeldExclusively())
        throw new IllegalMonitorStateException();
    Node first = firstWaiter;
    if (first != null)
        doSignal(first);
}

AQS-Condition-signal.png

目录
相关文章
|
3月前
|
存储 Java
JAVA并发编程AQS原理剖析
很多小朋友面试时候,面试官考察并发编程部分,都会被问:说一下AQS原理。面对并发编程基础和面试经验,专栏采用通俗简洁无废话无八股文方式,已陆续梳理分享了《一文看懂全部锁机制》、《JUC包之CAS原理》、《volatile核心原理》、《synchronized全能王的原理》,希望可以帮到大家巩固相关核心技术原理。今天我们聊聊AQS....
|
7月前
|
设计模式 存储 Java
【面试问题】什么是 AQS ?
【1月更文挑战第27天】【面试问题】什么是 AQS ?
|
设计模式 Java API
终于弄懂AQS了
大家好,我是三友~~ 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题。那你是不是很好奇,这些Lock锁api是如何实现的呢?本文就是来探讨一下这些Lock锁底层的AQS(AbstractQueuedSynchronizer)到底是如何实现的。
AQS源码解读之一
AQS源码解读之一
48 0
|
Java 开发者
每天一道面试题之-AQS
每天一道面试题之-AQS
184 0
|
安全
AQS学习:ReentrantLock源码解析
AQS学习:ReentrantLock源码解析
52 0
|
算法 Java API
深入浅出理解Java并发AQS的共享锁模式
深入浅出理解Java并发AQS的共享锁模式
137 0
深入浅出理解Java并发AQS的共享锁模式
|
设计模式 SpringCloudAlibaba 安全
聊一聊 ReentrantLock 和 AQS 那点事
聊一聊 ReentrantLock 和 AQS 那点事
183 0
聊一聊 ReentrantLock 和 AQS 那点事
|
安全 Java
AQS是什么?Java并发编程大师的源码不得不拜读呀
今天把ReentrantLock和AQS一起翻一翻,通过源码说一说我们的Java锁,先上一个目录: 一、初识ReentrantLock 二、什么是AQS ? 三、AQS中的同步状态state 四、CLH变体队列 五、独占模式 六、共享模式 七、公平锁&非公平锁 八、结语
AQS是什么?Java并发编程大师的源码不得不拜读呀
|
Java
Java并发编程 - AQS 简介(AbstractQueuedSynchronizer)
Java并发编程 - AQS 简介(AbstractQueuedSynchronizer)
148 0
Java并发编程 - AQS 简介(AbstractQueuedSynchronizer)