首页 > 代码库 > AQS
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。