gpt4 book ai didi

java - 为什么 Java 的同步集合不使用读/写锁?

转载 作者:太空狗 更新时间:2023-10-29 22:44:58 28 4
gpt4 key购买 nike

在像 HashtableVector 这样的东西被劝阻之后,当集契约(Contract)步包装器出现时,我认为同步处理会更有效。现在我查看了代码,我很惊讶它真的只是用同步块(synchronized block)包装集合。

为什么 ReadWriteLock 没有包含在集合中,例如 SynchronizedMap?是否有一些不值得的效率考虑?

最佳答案

读写锁是性能优化的一部分,这意味着它可以在某些情况下允许更大的并发。必要条件是,它们应用于大部分时间读取但未修改的数据结构。

在其他条件下,它们的性能略低于排他锁,这是自然而然的,因为它们具有更高的复杂性。

如果读写锁的锁通常保持适当长的时间并且只对 protected 资源进行少量修改,则效率最高。

因此,读写锁是否优于排他锁取决于用例。最终,您必须通过分析来衡量哪些锁的性能更好。

考虑到这一点,为 Collections.synchronizedMap 选择独占锁似乎更适合解决一般用例,而不是大多数读者的特殊情况。

更多链接

enter image description here

[...] However, in a configuration where write operations were more prevalent, the version with synchronized blocks was 50% faster than one based on read-write locks with the Sun 1.6.0_07 JVM (14% faster with the Sun 1.5.0_15 JVM).

In a low-contention case with just 1 reader and 1 writer, the performance differences were less extreme, and each of the three types of locks yielded the fastest version on at least one machine/VM configuration (e.g., note that ReentrantLocks were fastest on the 2-core machine with the Sun 1.5.0_15 JVM).

关于java - 为什么 Java 的同步集合不使用读/写锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638233/

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