浅谈Java的AQS

AQS(AbstractQueuedSynchronizer)是Java并发编程的重要框架,用于实现阻塞锁和同步器。本文深入探讨AQS的基本思想,包括State变量、CLH队列、独占和共享模式下的资源获取与释放过程,以及相关核心方法如tryAcquire、tryRelease、acquire、release等。通过理解和使用AQS,可以更好地构建并发控制组件。
摘要由CSDN通过智能技术生成

所谓AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。

了解一个框架最好的方式是读源码,说干就干。

AQS是JDK1.5之后才出现的,由大名鼎鼎的Doug Lea李大爷来操刀设计并开发实现,全部源代码(加注释)2315行,整体难度中等。

* @since 1.5
* @author Doug Lea

基本框架

在阅读源码前,首先阐述AQS的基本思想及其相关概念。

AQS基本框架如下图所示:

在这里插入图片描述

AQS维护了一个volatile语义(支持多线程下的可见性)的共享资源变量state和一个FIFO线程等待队列(多线程竞争state被阻塞时会进入此队列)。

State

首先说一下共享资源变量state,它是int数据类型的,其访问方式有3种:

  • getState()
  • setState(int newState)
  • compareAndSetState(int expect, int update)

上述3种方式均是原子操作,其中compareAndSetState()的实现依赖于Unsafe的compa

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值