关于Java中的ReadWriteLocks(特别是ReentrantReadWriteLock实现)的一个简单问题,因为我没有找到sun文档。
当另一个人请求写锁定时,如果线程持有读锁定会发生什么? 写锁定线程是否必须等待释放所有当前保持的读锁定? 此外,所有新的读锁定请求是否被阻止,直到授予和释放写锁定为止?
由于
答案 0 :(得分:3)
Javadoc解释了这一点:
本课程并未强加读者 或作家偏好订购 锁定访问。但是,它支持 可选的公平 政策。当建成公平时, 线程争用使用的入口 大约到货订单政策。 写锁定被释放时 要么是等待时间最长的单身 作家将被分配写 锁定,或者如果有读者等待 比任何作家都要长 读者将被分配阅读 锁。当构建为非公平的时候 进入锁定的顺序需要 不在抵达顺序。在任何一个 如果读者活跃并且a 作家进入锁然后没有 随后的读者将被授予 读锁直到那个作家之后 已经获得并发布了这篇文章 锁。
当另一个人请求写锁定时,如果线程持有读锁定会发生什么?写锁定线程是否必须等待释放所有当前保持的读锁定?
是的,作家将不得不等待。但它只会等待当前持有的读锁定。任何迟到的读者都会排在作家之后。
此外,在授予和释放写锁定之前,是否所有新的读锁定请求都会被阻止?
是
答案 1 :(得分:1)
ReadWriteLock
不能与读锁同时保持写锁。在保持读锁定时请求写锁定将导致阻塞或失败。