基于AQS原理实现的锁

本文详细介绍了AQS(AbstractQueuedSynchronizer)的概念、组件及工作原理。AQS是一个基于FIFO等待队列的阻塞锁和同步器模板框架,提供了独占和共享两种模式。文章讲解了AQS中的state属性、Node节点、ConditionObject条件对象,以及AQS如何通过CAS操作实现线程间的同步和通信。通过对AQS的工作流程的分析,阐述了加锁和解锁的过程,帮助读者理解自定义AQS实现锁的原理。
摘要由CSDN通过智能技术生成
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具备读写
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疾风先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值