【676、AQS 基本介绍以及 JDK 中的应用】

174 阅读1分钟

AQS(AbstractQueuedSynchronizer)是Java并发包中的一个基础类,它提供了一种简单的机制来实现同步器,例如ReentrantLock和Semaphore等。AQS的设计思想是基于FIFO队列实现的。

AQS提供了两种同步方式:共享模式和独占模式。共享模式表示多个线程可以同时获取同一个锁,而独占模式则表示只有一个线程可以获取锁。

AQS的内部实现是通过一个双向链表(FIFO队列)来维护等待线程,队列的头部是当前持有锁的线程,而其他线程排队在队列的尾部。当锁被释放时,AQS会自动唤醒队列中的第一个线程来获取锁。

JDK中使用AQS的类有很多,其中比较典型的有:

  • ReentrantLock:可重入锁,支持公平和非公平两种模式。
  • Semaphore:信号量,用于控制同时访问某个资源的线程数量。
  • CountDownLatch:倒计时锁存器,可以让某个线程等待其他线程执行完毕后再执行。
  • CyclicBarrier:循环屏障,可以让一组线程等待彼此达到一个共同的屏障点再一起继续执行。
  • ReentrantReadWriteLock:可重入读写锁,支持读锁和写锁两种模式。

总之,AQS是Java并发包中非常重要的一个类,提供了一种简单而强大的机制来实现同步器,能够有效地帮助我们实现并发控制。