0

只是一个关于 Java 中的 ReadWriteLocks(特别是 ReentrantReadWriteLock 实现)的快速问题,因为我没有找到清楚的 sun 文档。

如果一个线程在另一个线程请求写锁时持有读锁会发生什么?写锁线程是否必须等待所有当前持有的读锁被释放?此外,在授予和释放写锁之前,是否所有新的读锁请求都会被阻止?

谢谢

4

2 回答 2

3

Javadoc 对此进行了解释:

此类不会为锁访问强加读取器或写入器的优先顺序。但是,它确实支持可选的 公平 策略。当构造为公平时,线程使用近似到达顺序策略竞争进入。当写锁被释放时,等待时间最长的单个写入器将被分配写入锁,或者如果有一个读取器等待的时间比任何写入器都长,则将为一组读取器分配读取锁。当构造为不公平时,进入锁的顺序不必是到达顺序。在任何一种情况下,如果读取器处于活动状态并且写入器进入锁,那么在该写入器获取并释放写入锁之前,后续的读取器将不会被授予读取锁。


如果一个线程在另一个线程请求写锁时持有读锁会发生什么?写锁线程是否必须等待所有当前持有的读锁被释放?

是的,作者将不得不等待。但它只会等待当前持有的读锁。稍后到达的任何读者都将在作者之后排队。

此外,在授予和释放写锁之前,是否所有新的读锁请求都会被阻止?

是的

于 2009-07-07T10:10:38.703 回答
1

AReadWriteLock不能同时持有写锁和读锁。例如,在持有读锁时请求写锁将导致阻塞或失败。

于 2009-07-07T09:59:14.827 回答