黄小华的个人网站
熬过无人问津的日子才有诗和远方!
直插并发编程深处AQS

AQS(AbstractQueuedSynchronsizer)抽象的队列式同步器。
AQS中维护了一个volatile int state(共享资源,该数管理整个队列)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列(双向链表)CLH队列)。
这里volatile能够保证多线程下的可见性,当state=1则代表当前对象锁已经被占有,其他线程来加锁时则会失败,加锁失败的线程会被放入一个FIFO的等待队列中,队列会被UNSAFE.park()操作挂起,等待其他获取锁的线程释放锁才能够被唤醒。
另外state的操作都是通过CAS(乐观锁(死循环去对比state的值是否与预期的值相同,相同则进行修改并返回true,不同则不操作返回false),需要硬件支持,现在CPU都支持CAS原语)来保证其并发修改的安全性。