[英]ReentrantReadWriteLock vs synchronized
我们应该何时使用ReentrantReadWriteLock与Java中多线程环境中的synchronized关键字进行比较?
使用ReentrantReadWriteLock而不是Java中的同步有什么好处?
任何人都可以给出一个例子(在Java中)吗?
谢谢!
同步允许一次在一个线程中。
读/写锁允许同时在多个读取器中,但只有在没有编写器的情况下才允许。因此,在某些使用场景下,我们可以获得更好的并发性,因为读者群可以一起进行。
Java API 文档给出了集合类的示例,这些集合类应该具有比编写器更多的读者。
应该注意的是, StampedLock
已经推出了Java 8,并且它比ReentrantReadWriteLock
快得多(特别是当你使用越来越多的线程时)你不以可重入的方式使用锁(使用StampedLock
可能会导致死锁) ,所以不要这样做)。
它还允许在没有写锁定的情况下可用的乐观读取非锁定。 与普通读锁不同,它们不会阻止建立写锁。 您可以使用validate
方法检查是否已在乐观读取非锁定上建立了写锁定。
它的接口有点不同,因为你必须存储一个称为戳记的long
值,以便以后正确地解锁读或写锁,或者在你完成后再适当地validate
乐观读取非锁定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.