【并发编程篇14】AQS

52 阅读1分钟

AQS

Abstract Queued Synchronizer,抽象队列同步器,它是构建锁或其他同步组件的基础框架。(是JUC中提供的一种锁机制)

AQS 与Synchronized的区别

  • Synchronized
    • 关键字,由C++语言实现
    • 悲观锁,自动释放锁
    • 锁竞争激烈都是重量级锁,性能差
  • AQS
    • Java语言实现
    • 悲观锁,手动开启和关闭
    • 锁竞争激烈情况下,提供了多种解决方案

AQS 基本工作机制

image.png

AQS可以是公平锁,也可以是非公平锁

  • 新的线程与队列中的线程共同抢资源,是非公平锁
  • 新的队列到线程中等待,只让队列中的head线程获取锁,是公平锁

什么是AQS?

  • 是多线程中的队列同步器,是一种锁机制,它是一个基础框架,像ReetrantLock、Semaphore都是基于AQS实现的
  • AQS内部维护了一个先进先出的双向队列,队列中存储着排队的线程
  • AQS内部有一个volatile修饰属性变量state,这个state就是一个是否获取锁的标志。如果一个线程修改state为1成功了,则表示该线程获取了锁
  • 在对state修改时使用CAS操作,保证多个线程修改的原子性

image.png