- AbstractQueuedSynchronizer又称抽象队列同步器,简称AQS,它是用来构建锁或其他同步组件的基础框架,
- ReentrantLock内部就包含了一个AQS对象抽象类的实现类
- AQS内部有个int类型的变量state,加锁就是将state值通过cas操作从0变为1,并标记加锁线程为自己, 以通过判断当前获得锁的线程是否是自己,如果是对state进行累加,这就是可重入锁的实现原理,
- 如果其它线程获取锁时发现state的值是1,获取锁失败,会加入aqs的同步队列
释放锁就是将state变量的值减1,如果state值为0,则彻底释放锁,会将“加锁线程”变量也设置为null
同步等待队列,条件变量等待队列都是由内部类Node构成的,
同步等待队列,完成线程获取锁的排队工作
条件变量等待队列保存那些由Condition.await()引起阻塞的线程。