1. 是什么
AQS是用来构建锁和同步器的一个框架,我们常用的ReentrantLock,Semaphore等都是基于AQS的。
2. 原理
如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态。如果请求的共享资源被占用,那么就需要一套的线程阻塞等待以及被唤醒时锁分配的机制,这个机制时使用队列锁实现的,将暂时获取不到锁的线程添加到队列中。
AQS使用一个int成员变量来表示同步状态,使用CAS操作对其进行修改。
3. 共享资源的方式
- 独占模式:只能有一个线程执行,比如ReentrankLock,可以分为公平锁和非公平锁
公平锁:按照线程在队列中的顺序执行
非公平锁:线程获取锁的时候,无视队列去抢夺锁资源 - 共享模式:多个线程可以同时执行,比如
CountDownLatch、Semaphore、CyclicBarrar