(四)互斥锁(下):用一把锁保护多个资源

使用一把锁来保护多个资源的正确姿势:那就是在Class 整个类上共用一把锁。

用 Account.class 作为共享的锁,这个锁是所以Account 对象共享的,而且这个对象是Java 虚拟机在加载 Account 类的时候就创建的,所以我们不用担心它的唯一性。下图展示了共享锁是如何保护不同对象的临界区的。

总结:

相信你现在对于如何保护多个资源已经很有心得了,关键是要分析多个资源之间的关系,如果资源之间没有关系,很好处理,每个资源一把锁就可以了。如果资源之间有关联关系,就要选一个粒度更大的锁,这个锁应该能覆盖所有相关的资源。

原子性”的本质是什么?其实不是不可分割,不可分割只是外在表现,其本质是多个资源间有一致性的要求,操作的中间状态对外不可见。例如,在 32 位的机器上写 long 型变量有中间状态(只写了 64 位中的 32 位),在银行转账的操作中也有中间状态(账户 A 减少了 100,账户 B 还没来得及发生变化)。所以解决原子性问题,是要保证中间状态对外不可见

猜你喜欢

转载自blog.csdn.net/lss446937072/article/details/112690952