2.需求
2.1 功能
AQS至少提供两种方法acquire和release:
acquire:至少有一个会阻塞调用线程,除非获得操作/直到同步状态允许它继续
release:至少一个版本操作变化同步状态...许多同步器不需要这样的参数,所以忽略它即可
3.2 阻塞
在JSR-166之前,还没有可用的Java API来阻塞和解除阻塞线程,以创建不基于内置监视器的同步器....(虚假唤醒也可以)调用unpark不会被"计算"在内,所以在park之前有多个unpark只会解阻塞一个park。...此外,这适用于每个线程,而不是每个同步器.在新的同步器上调用park的线程可能会立即返回.但是,如果没有unpark,则其下一个调用将被阻塞,尽管可以明确清除此状态,但这样做是不值得的,在碰巧有必要时多次调用...如果节点的后续节点通过它的下一个字段似乎不存在(或似乎被取消),那么总是可以从列表的末尾开始,并使用pred字段向后遍历,以准确地检查是否确实存在一个节点。