AQS
AQS是什么
AQS(AbstractQuenedSynchronizer)的核心是一个抽象队列同步器。
CLH是AQS的一个重要组成部分,它是一个双向队列。AQS将每一个请求共享资源的线程封装成CLH锁队列的一个结点,来实现锁分配。
state是AQS中的共享变量,用于记录线程状态。
AQS基于CLH双向队列,用volatile修饰共享变量state,线程通过CAS改变state,从而成功获取锁,失败则进入队列等待被唤醒。
AQS的资源共享方式
AQS定义了两种资源共享方式:
- Exclusive:独占,只有一个线程运行,如ReentrantLock
- Share:共享,多个线程可以共同持有,如Semaphore,CountDownLatch