基于AQS原理实现的锁

1. AQS概念及其组件

AQS基础概念及其作用

  • AQS基础概念

    • AQS: 即抽象队列同步器,AbstractQueuedSynchronizer
    • AQS之shared mode: 即共享锁/读锁,用于线程读取加锁,不能进行写操作,可以读读共享
    • AQS之exclusive mode: 即独占锁/排他锁/写锁,用于线程原子写操作时加锁,只能一个线程持有,其他线程处于等待状态
    • AQS中不同mode的线程共享相同的等待队列wait queue,也就是在同一个阻塞队列中,线程持有的mode可能会不同
    • state属性: 作为AQS的同步状态信息属性,state具备线程安全特性(valatile & CAS分别保证可见性和原子性)
  • AQS主要作用

    • 提供一个基于FIFO等待队列的阻塞锁和相关同步器的模板框架,即AQS
    • 对于阻塞锁和同步器的实现子类,必须定义一个非对外访问的helper class来继承AQS,利用AQS中受保护的方法来为阻塞锁和同步器对外暴露的方法提供服务
    • 继承AQS的同步器子类将通过模板框架提供的CAS操作state方式来保证原子性,以及volatile修饰保证可见性,这样能够实时知道当前对象获取锁或者释放锁所处的状态信息
    • 一般情况下,子类只会实现上述两种mode之一,但是对于ReadWriteLock具备上述两种mode,这也就是ReadWriteLock具备读写锁的特征
    • AQS内部定义一个实现Condition接口的实现内部类ConditionObject,主要作用是结合独占模式下的方法一同使用,也就是说在并发线程持有相同的独占锁情况下,独占资源下的方法可以结合Condition下的唤醒与挂起线程的方式完成线程之间的通信(独占资源方法有, 比如isHeldExclusively判断当前线程是否持有独占

猜你喜欢

转载自blog.csdn.net/wind_602/article/details/104161960
今日推荐