粗粒度锁
作者:David Rice 和 Matt Foemmel
使用单个锁锁定一组相关对象。
有关完整描述,请参阅 EAA 模式 页面 438
对象通常可以作为一个组进行编辑。也许您有一个客户及其地址集。如果是这样,在使用应用程序时,如果您想锁定其中任何一个项目,则有意义的是锁定所有这些项目。为单个对象设置单独的锁会带来许多挑战。首先,任何操作它们的人都需要编写能够找到所有这些对象的代码以锁定它们。对于客户及其地址来说,这很容易,但随着锁定组的增多,它会变得很棘手。如果组变得复杂怎么办?当您的框架管理锁获取时,这种行为在哪里?如果您的锁定策略要求加载对象才能锁定它,例如使用乐观离线锁 (416),则锁定大型组会影响性能。而使用悲观离线锁 (426),大型锁集会成为管理上的麻烦,并增加锁表争用。
粗粒度锁是一个覆盖多个对象的单个锁。它不仅简化了锁定操作本身,而且还使您无需加载组的所有成员即可锁定它们。