less than 1 minute read

AQS全称AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具框架。ReetrantLockSemaphore等都是基于AQS的。可以使用AQS自定义锁。

特点:

  • 用state属性来表示资源的状态(独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁
  • 提供基于FIFO的等待队列
  • 条件变量来实现等待、唤醒机制,支持多个条件变量

AQS原理

AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制。这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。

AQS对资源的共享方式

AQS定义两种资源共享方式:

  • exclusive。只有一个线程能执行。如ReentrantLock
  • share。多个线程可同时执行。

AQS底层使用了模板方法模式