首先可以看: http://ifeve.com/java-special-troops-aqs/
再看 《Java并发编程的艺术》第5章
核心:同步器的acquire方法:
首先调用自定义同步器实现的tryAcquire(int arg)方法,该方法保证线程安全的获取同步状态,如果同步状态获取失败,则构造同步节点(独占式Node.EXCLUSIVE,同一时刻只能有一个线程成功获取同步状态)并通过addWaiter(Node node)方法将该节点加入到同步队列的尾部,最后调用acquireQueued(Node node, int arg)方法,使得该节点以“死循环”的方式获取同步状态。如果获取不到阻塞节点中的线程,而被阻塞线程唤醒主要依靠前驱节点的出队或者阻塞线程被中断来实现