AQS
AQS的核心思想:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待已经被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
CLH队列是一个虚拟的双向队列,AQS是将每条请求共享资源的线程封装成一个CLH锁队列的一个结点来实现锁的分配。
AQS使用一个int成员变量来表示同步状态,通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS对该同步状态进行原子操作实现对其值的修改。
AQS定义两种资源共享方式:
独占:只有一个线程能执行,如Reentrant Lock。分为公平锁和非公平锁。
共享:多个线程可以同时执行,如Semaphore,CountDownLatch,CyclicBarrier
AQS组件: