gpt4 book ai didi

java - 监视器锁的最低字节使用值是多少?

转载 作者:行者123 更新时间:2023-11-30 10:39:13 25 4
gpt4 key购买 nike

要在 Java 中使用内部锁定

Object o = new Object()
...
sychronized (o) {
...
}

所以一台显示器已经需要一个对象即8 bytes or 16 bytes for 64bit (或 12 个字节用于压缩操作和 64 位)。

现在假设你想使用很多这样的显示器,例如对于 array which one can synchronize over certain areas并且具有比 Collections.synchronizedList 更好的并发性(基于条目) .那么实现这个最有效的方法是什么?我可以以某种方式对 4 个条目使用 2 个嵌套锁,或者对 8 个条目使用 3 个嵌套锁吗?或者我可以使用“每个线程一个锁”,例如在ConcurrentHashMap<array_index, lock>

最佳答案

根据访问模式,您可以通过对数据结构进行分段并使用单个内在锁来保护多个元素,从而以更少的锁来提高并发性。 java.util.concurrent 包中提供的一些并发集合中使用了此技术。

“我能否以某种方式对 4 个条目使用 2 个嵌套锁,或者对 8 个条目使用 3 个嵌套锁,等等?”听起来您打算将每个锁都当作条目索引中的一个位来对待:如果该位已设置,则获取锁;如果该位已设置,则获取该锁;如果很清楚,请跳过它。这行不通。想想索引 0。不会获取任何锁,您也没有并发控制。

您可以通过将锁的数量加倍(为每个位设置一个“设置”和“清除”锁)来使其“工作”,但这仍然是一个坏主意,因为您会浪费锁并获得非常差的并发性.最外面的锁将保护一半的条目。随后获取的任何嵌套锁都将无用,因为其他线程已被排除在该段之外。

这会让您回到对数据进行分段,每个分段使用一个锁,就像 java.util.concurrency 所做的那样。

关于java - 监视器锁的最低字节使用值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39379496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com