1、AQS的定义
AQS ( Abstract Queued Synchronizer )是一个抽象的队列同步器,通过维护一个共享资源状态( Volatile Int State )和一个先进先出( FIFO )的线程等待队列来实现一个多线程访问共享资源的同步框架。
AQS主要是为每个共享资源设置一个锁,线程去访问共享资源的时候,首先就要先获取这个锁,如果获取到了这个锁之后,才可以在线程中使用对应的共享资源。如果没有获取到这个锁,那么就需要放到线程等待队列中,等待下一次的资源调度。其中ReentrantLock,Semaphore,CountDownLatch这些同步类的实现都是依赖于AQS。
2、AQS有两种共享资源方式(独占式与共享式)
- 独占式:只有一个线程能执行,具体的 Java 实现有 ReentrantLock。
独占锁:
acquire、tryAcquire:锁的获取
tryAcquireNanos:锁的获取,可以设置超时时间
release、tryRelease:锁的释放
isHeldExclusively:判断同步器是否处于独占模式
- 共享式:多个线程可同时执行,具体的 Java 实现有 Semaphore和CountDownLatch。
共享锁:
acquireShared、tryAcquireShared:锁的获取
tryAcquireSharedNanos:锁的获取,可以设置超时时间
releaseShared、tryReleaseShared:锁的释放