java - 在 ReentrantReadWriteLock 中是否有 WriteLock 优先于 ReadLock

标签 java multithreading concurrency reentrantreadwritelock

我读过 java 文档:ReentrantReadWriteLock

而且我没有看到 writeLock 比 readLock 有任何优先级

但我也读过这样的主题:Are read and write locks in ReentrantReadWriteLock somehow related?
我在两个答案中都看到了以下短语:

if lock is held by readers and thread request write lock no more readers are allowed to acquire read lock until thread which has acquired write lock release it.


Prefers writers over readers. That is, if a writer is waiting on the lock, no new readers from other thread are allowed to access the resource. Existing readers can continue to use the resource until they release the lock. This prevents so-called "writer starvation".

这些短语听起来很有意义,看起来我已经在其他地方读过。

但显然与java doc是矛盾的

它在最新的 JDK 中有变化吗?它仍然有效吗?

如何防止作家饥饿?

最佳答案

ReentrantReadWriteLock 描述了两种操作模式:公平模式和非公平模式。您引用的选择似乎旨在描述公平模式。我不会说两者显然是矛盾的。但是,我可以看到第一个中不精确的措辞(“不允许更多读者”)可能会导致混淆。我怀疑“更多读者”是指来自其他线程的新读者,而不是来自同一线程的额外重入读取,有些人可能会将其解释为同一读者。如果以这种方式解释,那么它们似乎与 JavaDoc 一致。

关于java - 在 ReentrantReadWriteLock 中是否有 WriteLock 优先于 ReadLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395939/

相关文章:

java - 这是对部分构造对象的引用转义吗?

java - Java 中的简单对象验证

java - 如何为静态 void 方法实现 doNothing() ?

java - 在 AJax 中提交 Spring 表单始终为 null

java - java中安全的多线程文件创建

android - Activity 和 Service 之间共享大量数据

java - 尝试在 REPEATABLE-READ 隔离级别下在 MySQL 中创建幻像

c# - Task.ContinueWith 不调用第二个任务(仅第一个任务正在运行)

java - 如何从线程中获取反馈? java

c - 叉 TreeMap