AQS
Posted 秋雾茹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AQS相关的知识,希望对你有一定的参考价值。
AQS(AbstractQueuedSynchronizer)顾名思义,抽象的队列同步器。
它是JUC中大部分同步工具的基础。如:CountDownLatch/FutureTask/ReentrantLock/RenntrantReadWriteLock/Semaphore。
它更是一个模板模式的典型应用。接下来就主要阐述这个模板的主要流程。
首先从结构来简单介绍一下AQS,代码如下
class aqs{ // 表示线程对资源的占有状态 int state; // 线程悬停队列的头指针与尾指针 Node head; Node tail; // 双向链表 static class Node{ int waitStatus; /* -1(SIGNAL): 表示下一个节点的线程需要被释放 1(CANCELLED): 当前节点的线程已被标志为退出状态 -2(CONDITION): 用于条件队列 -3(PROPAGATE): 共享状态的中间状态 0(None): None of the above */ Node prev; Node next; Thread thread; } }
刚刚就有提及AQS就是模板模式实现的。而模板模式最重要的就是流程的制定。而aqs的主流程:
Acquire: while (!tryAcquire(arg)) { enqueue thread if it is not already queued; possibly block current thread; } Release: if (tryRelease(arg)) unblock the first queued thread;
/**
最重要的两个方法, 主流程
独占模式与共享模式
Condition
*/
以上是关于AQS的主要内容,如果未能解决你的问题,请参考以下文章