繁体   English   中英

与内部锁同步

[英]Synchronization with intrinsic locks

我正在阅读B. Goetz的Java并发实践 ,现在我正处于关于锁定的部分。 他说过

每个对象都有一个内置锁的事实只是一个方便,所以你不需要显式创建锁对象

9回想起来, 这个设计决策可能很糟糕:它不仅令人困惑,而且迫使JVM实现者在对象大小和锁定性能之间进行权衡。

因为,我是并发新手,他所谈论的设计决策并不明显。 从性能的角度来看,创建显式锁对象是不是很糟糕,不是吗?

我自己从未实现过JVM,甚至没有参与其开发,但我可以想象权衡。

将内在锁与每个对象相关联的第一个想法是这样做:将一个锁与其状态(我被锁定,由哪个线程)关联到JVM中创建的每个对象,与其余的对象状态。 这应该是有效的,但是,它也会使每个创建的对象占用内存中的额外空间,并且大多数情况下,该空间永远不会被使用(因为同步不常见,并且大多数对象从不用作锁) 。

另一个想法是维护某种单独的惰性字典,只有当该对象实际用作锁时才会为对象创建锁及其状态。 这很明显,并且可能效率较低,因为字典需要与对象等并行维护。但它会在内存中使用更少的空间。

因此,我认为这是Brian Goetz谈论的权衡(或权衡的一部分)。 它确实不那么令人困惑,如果只有特定的对象可以充当锁,那么实现可能会更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM