在阅读源代码时 ReentrantLock
,我发现它内部使用了一个同步器 AbstractQueuedSynchronizer
控制门锁。doug lea在本文中提到 AbstractQueuedSynchronizer
用作“模板方法模式”,这有助于简化子类的编码。
然而,joshua bloch在有效的java中建议我们应该“支持组合而不是继承”,因为“与方法调用不同,继承违反了封装”。在我的理解中,spring中的“模板”(例如。 RedisTemplate
, TransactionTemplate
等)遵循此规则。
所以,回到 AbstractQueuedSynchronizer
以及中定义的同步器 ReentrantLock
,我想知道它的设计(基于模板方法模式)是否有任何缺点。非常感谢!
暂无答案!
目前还没有任何答案,快来回答吧!