重入读写锁与同步

2022-09-02 11:49:20

与Java中多线程环境中的同步关键字相比,我们什么时候应该使用ReentrantReadWriteLock

与在Java中同步相比,使用ReentrantReadWriteLock有什么好处?

任何人都可以举个例子(在Java中)吗?

谢谢!


答案 1

同步允许一次一个线程。

读/写锁定允许同时进入多个读取器,但前提是没有写入器。因此,在某些使用场景下,我们可以获得更好的并发性,因为读者群可以一起进行。

Java API 文档给出了集合类的示例,这些集合类的读取器数应多于编写器数。


答案 2

Brian的锁定文章详细解释了每种方法的优缺点。

Lock 框架是同步的兼容替代品,它提供了同步未提供的许多功能,以及在争用下提供更好的性能的实现。但是,这些明显好处的存在并不是一个足够好的理由,总是更喜欢ReentrantLock而不是同步。相反,根据您是否需要ReentrantLock的功能做出决定。在绝大多数情况下,你不会 - 同步工作得很好,适用于所有JVM,被更广泛的开发人员理解,并且不易出错。保存锁定,以备您真正需要时使用。在这些情况下,你会很高兴你拥有它。