概述:
AQS全称为(AbstractQueuedSynchronizer),意思是抽象队列同步器,我的理解是,实现锁机制的一个框架,基于设计模式中--模板模式的方式设计的。
内容:
AQS内部主要内容是state状态,以及CLH双向队列。
- state:全局变量,线程如果成功修改变量,则表示成功获取锁,执行后续逻辑
- CLH:当线程获取锁,及修改变量失败,则将线程信息包装成一个节点Node加入队列中
- 改进自旋锁,未获取锁的线程封装成node,连接成一个队列,每个节点会循环查看前一个节点锁状态,当有锁并释放后,获取锁。
实例
可重入锁ReentranLock,继承了AQS,只需实现对应获取锁,释放锁的方法即可
前提:state初值为0
- 获取锁:执行compareAndSetState(0,1)方法,先比较,如果state值为0,则修改为1。其他线程同样执行该方法,此时state为1,获取锁失败,加入CLH队列
- 释放锁:state值-1