知识卡片

模板方法管流程

普通读书笔记卡 · 1529.a

内容

AQS 使用模板方法固定抢锁流程:lock() 调用基类模板方法 acquire(arg),先尝试获取失败则入队,入队后自旋判断前驱状态、必要时挂起。AQS 定义两种共享方式——Exclusive(独享,如 ReentrantLock)和 Share(共享,如 Semaphore)——各有模板流程,都是”失败入队/唤醒出队”逻辑。子类只需实现 state 的获取释放钩子。

参考来源

- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第6章《AQS抽象同步器的核心原理》6.3节《AQS中的模板模式》、6.3.3节《AQS的模板流程》、6.5.1节《显式锁抢占的总体流程》(源文件:_epub-src/OEBPS/Text/chapter190.xhtml、chapter193.xhtml、chapter200.xhtml) - 结论依据:原文说明“自定义同步器只需要实现共享资源state的获取与释放方式即可,这些逻辑都编写在钩子方法中。无论是共享锁还是独享锁,AQS在执行模板流程时都会回调自定义的钩子方法”,并给出SimpleMockLock的lock()方法调用同步器acquire(arg)模板方法作为流程起点,因此推出本卡结论。 - 原始内容:自定义的同步器只需要实现共享资源state的获取与释放方式即可,这些逻辑都编写在钩子方法中。无论是共享锁还是独享锁,AQS在执行模板流程时都会回调自定义的钩子方法……显式锁的lock()方法会去调用同步器基类AQS的模板方法acquire(arg)。