参考致谢:
https://blog.csdn.net/wanliguodu/article/details/81154294#commentBox
Java并发之AQS详解 - waterystone - 博客园 (cnblogs.com)
https://blog.csdn.net/vernonzheng/article/details/8275624
JUC AQS ReentrantLock源码分析(一)_java_lyvee的专栏-CSDN博客
1 什么是AQS?
1.1 同步器
多线程并发的执行,之间通过某种共享状态来同步,只有当状态满足共享资源空闲/忙碌条件时,才能触发线程执行锁定/等待 。这个共同的语义可以称之为同步器。
Node:构建锁或者其他同步组件的基础框架的关键(锁是面向使用者,同步器面向锁的实现者)
state:共享资源,线程竞争失败,加到CLH队列里。
所有实现同步的锁机制都可以基于同步器定制来实现的。juc(java.util.concurrent) 里所有的这些锁机制都是基于 AQS( AbstractQueuedSynchronizer )框架上构建的。
1.2 AQS核心思想
AQS( AbstractQueuedSynchronizer)抽象队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch等。