Java ReentrantReadWriteLock请求

时间:2009-07-07 09:51:26

标签: java thread-safety reentrantreadwritelock readwritelock

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

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

由于

2 个答案:

答案 0 :(得分:3)

Javadoc解释了这一点:

  

本课程并未强加读者   或作家偏好订购   锁定访问。但是,它支持   可选的公平   政策。当建成公平时,   线程争用使用的入口   大约到货订单政策。   写锁定被释放时   要么是等待时间最长的单身   作家将被分配写   锁定,或者如果有读者等待   比任何作家都要长   读者将被分配阅读   锁。当构建为非公平的时候   进入锁定的顺序需要   不在抵达顺序。在任何一个   如果读者活跃并且a   作家进入锁然后没有   随后的读者将被授予   读锁直到那个作家之后   已经获得并发布了这篇文章   锁。


  

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

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

  

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

答案 1 :(得分:1)

ReadWriteLock不能与读锁同时保持写锁。在保持读锁定时请求写锁定将导致阻塞或失败。