AQS

71 阅读1分钟

概述:

AQS全称为(AbstractQueuedSynchronizer),意思是抽象队列同步器,我的理解是,实现锁机制的一个框架,基于设计模式中--模板模式的方式设计的。

内容:

AQS内部主要内容是state状态,以及CLH双向队列。

  • state:全局变量,线程如果成功修改变量,则表示成功获取锁,执行后续逻辑
  • CLH:当线程获取锁,及修改变量失败,则将线程信息包装成一个节点Node加入队列中
    • 改进自旋锁,未获取锁的线程封装成node,连接成一个队列,每个节点会循环查看前一个节点锁状态,当有锁并释放后,获取锁。

实例

可重入锁ReentranLock,继承了AQS,只需实现对应获取锁,释放锁的方法即可
前提:state初值为0

  • 获取锁:执行compareAndSetState(0,1)方法,先比较,如果state值为0,则修改为1。其他线程同样执行该方法,此时state为1,获取锁失败,加入CLH队列
  • 释放锁:state值-1