AbstractQueuedSynchronizer
AQS (AbstractQueuedSynchronizer) 抽象类的队列式同步器
J.U.C是基于AQS实现的,AQS是一个同步器
,设计模式是模板模式
。
核心数据结构:双向链表 + state(锁状态)
底层操作:CAS
原理概览
AQS核心思想是,如果被请求的共享资源空闲,那么就将当前请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机制主要用的是CLH队列的变体实现的,将暂时获取不到锁的线程加入到队列中。
CLH:Craig、Landin and Hagersten队列,是单向链表,AQS中的队列是CLH变体的虚拟双向队列(FIFO),AQS是通过将每条请求共享资源的线程封装成一个节点来实现锁的分配。