AQS
AQS是将每个获取不到锁的线程封装成一个结点(Node)形成双端队列
通过维护一个volatile变量state表示同步状态,当state为0时表示没有线程占用同步状态,当state为1时表示有一个线程占用同步状态。当多个线程竞争同步状态时,只有一个线程可以成功占用同步状态,其余线程将加入到AQS的同步队列中等待。当占用同步状态的线程释放同步状态时,AQS会从同步队列中选择一个线程唤醒,使其重新尝试获取同步状态
使用模板方法设计模式的思想,将同步状态的管理 、 阻塞队列和线程的阻塞唤醒等处理流程定义成固定的模板。组件开发者无需关注底层细节,只需要重写少数几个相关方法即可