1.什么是AQS?
AQS AbstractQueuedSynchronizer
抽象队列同步器
如果资源空闲,线程请求的时候加锁,设置资源为锁定状态,如果资源被占用,那么需要一套线程阻塞等待和唤醒时锁的分配机制
这个机制AQS是基于CLH锁,CLH是一个虚拟的双向队列,每一个获取不到所得线程进入该队列,AQS将每个线程封装成一个node节点,节点存放线程引用waiter,当前节点在队列等待的状态status,前一个结点prev,后一个节点next
每一个线程会被封装成一个node
AQS内部有一个volatile int state 用于表示共享资源是否被占用,通过提供getState,setState,compareAndSetState方法来获取和改变state状态
ReentrantLock RenntrantReadWriteLock等等都是实现了AQS