AQS源码中的三视图是如何实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3949个文字,预计阅读时间需要16分钟。
《AQS源码三维解析:JUC系列前两篇介绍AQS核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量。为上层各式各样的同步器实现提供了良好的模型,就像已介绍的Reentrant锁。》
AQS源码三视-JUC系列前两篇文章介绍了AQS的核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量。为上层各式各样的同步器实现画好了模版,像已经介绍到的ReentrantLock,Semaphroe,CountDownLatch都是在模版基础上实现的。花里胡哨,万变不离其宗。
以下是第三部分的内容,尝试写完Condition部分,基本结束AQS源码的学习,不过还是围绕着一个队列(条件队列)来进行的。
Tips
在第一篇文章中介绍Node类的nextWaiter字段的时候已经说明过它的一个字段两用,对于条件队列只有在独占模式下才会有。所以关于Condition的所有实现的一个前提是独占模式,需要谨记在心,对于理解源码非常重要。
队列结构条件队列的数据结构:定义了firstWaiter指向头节点,lastWaiter指向尾节点,node中nextWaiter指向后继节点,没有使用Node结构中的pred和next,Node中维护着waitStatus和thread字段。所以条件队列是一个头尾节点有指向的单向链表,如下图所示:
和同步队列不同的是它不需要单独维护的head虚节点,节点的waitStatus只有两种:CONDITION,CANCELLED。
本文共计3949个文字,预计阅读时间需要16分钟。
《AQS源码三维解析:JUC系列前两篇介绍AQS核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量。为上层各式各样的同步器实现提供了良好的模型,就像已介绍的Reentrant锁。》
AQS源码三视-JUC系列前两篇文章介绍了AQS的核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量。为上层各式各样的同步器实现画好了模版,像已经介绍到的ReentrantLock,Semaphroe,CountDownLatch都是在模版基础上实现的。花里胡哨,万变不离其宗。
以下是第三部分的内容,尝试写完Condition部分,基本结束AQS源码的学习,不过还是围绕着一个队列(条件队列)来进行的。
Tips
在第一篇文章中介绍Node类的nextWaiter字段的时候已经说明过它的一个字段两用,对于条件队列只有在独占模式下才会有。所以关于Condition的所有实现的一个前提是独占模式,需要谨记在心,对于理解源码非常重要。
队列结构条件队列的数据结构:定义了firstWaiter指向头节点,lastWaiter指向尾节点,node中nextWaiter指向后继节点,没有使用Node结构中的pred和next,Node中维护着waitStatus和thread字段。所以条件队列是一个头尾节点有指向的单向链表,如下图所示:
和同步队列不同的是它不需要单独维护的head虚节点,节点的waitStatus只有两种:CONDITION,CANCELLED。

