在Java多线程环境中,与同步关键字相比,什么时候应该使用ReentrantReadWriteLock呢?
在Java中使用ReentrantReadWriteLock而不是同步有什么好处?
任何人也可以给出一个例子(在Java中)吗?
谢谢!
发布于 2011-07-09 20:11:42
同步允许一次一个线程。
读/写锁允许同时读取多个读取器,但前提是没有写入器。因此,在某些使用场景下,我们可以获得更好的并发性,因为读者群体可以一起进行。
Java 文档给出了集合类的示例,这些类的读取器比作者多。
发布于 2011-07-09 20:23:26
布赖恩的锁定文章详细解释了每种方法的优缺点。
Lock框架是同步的兼容替代品,它提供了许多不是由同步提供的特性,以及在争用下提供更好性能的实现。然而,这些明显的好处的存在并不是总是喜欢ReentrantLock而不是同步的好理由。相反,根据是否需要ReentrantLock的能力来做出决定。在绝大多数情况下,您不会--同步工作得很好,在所有JVM上工作,被更广泛的开发人员所理解,并且不太容易出错。把锁留到你真正需要它的时候。在这种情况下,你会很高兴你拥有它。
发布于 2018-06-01 00:54:44
应该注意的是,StampedLock已经推出了Java8,当您不以可重入的方式使用锁时,它比ReentrantReadWriteLock快得多(特别是当您使用越来越多的线程时)(使用StampedLock会导致死锁,所以不要这么做)。
它还允许在没有有效写锁的情况下可用的乐观读非锁。与普通的读锁不同,它们不会阻止写锁的建立。通过使用方法,您可以检查是否已经在乐观的读非锁上建立了写锁。
它的接口有点不同,因为您必须存储一个名为戳记的long值,以便稍后正确地解锁读或写锁,或者在完成后正确地存储乐观的读不锁定( validate )。
https://stackoverflow.com/questions/6637170
复制相似问题