这里看下AQS中的acquire方法: 先不管这个方法是做什么的,但是是不是发现了一个熟悉的方法名—tryAcquire,它在AQS类中是个抽象方法,如下: 这就说明了,它具体的实现是在子类里,有如下这么多的子类对它做了重写: 但是其他方法的逻辑,比如addWaiter,acquireQueued以及selfInterrupt,AQS都自己做了具体的实现,同时要么使用了final关键字防止方法被重写,要么使用private修饰符表示方法是私有的,或者要么干脆就是静态方法
总结
对以上的做法做个概括就是,父类AQS规划了大致的逻辑,但是把中间的一些小细节交给了子类去做补充,但是子类不管怎么补充,业务的总体逻辑还是把控在父类的手上,再想想对模版方法的定义【定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤】,是不是能够对号入座了,到这里就可以了解到,同步器使用的是模版模式。