AQS 到底怎么排队的?CLH 队列、state 与条件变量全链路拆解
ReentrantLock 的 lock 方法执行 CAS 修改 state 失败后,线程会被封装为 Node 插入 CLH 队列尾部 ReentrantLock 的 lock 方法执行 CAS 修改 state 失败后,线程会被封装为 Node 插入 CLH 队列尾部。CountDownLatch 和 Semaphore 同样复用这套队列,只是 state 的初始值与递减逻辑不同。 AQS 的核心数据结构是 volatile int state 和一个 CLH 队列。ReentrantLock 把 state 当作重入计……