【问题标题】:Java ReentrantReadWriteLock requestsJava ReentrantReadWriteLock 请求
【发布时间】:2009-07-07 09:51:25
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: java thread-safety reentrantreadwritelock readwritelock


    【解决方案1】:

    Javadoc 对此进行了解释:

    这个类不强加读者 或作家偏好排序 锁定访问。不过确实支持 一个可选的公平 政策。当构建为公平时, 线程使用 大约到货顺序政策。 当写锁被释放时 要么是等待时间最长的单曲 writer 将被分配 write 锁定,或者如果有读者在等待 比任何作家都长, 读者将被分配阅读 锁。当构造为不公平时, 进入锁需要的顺序 不在到达顺序。在任一 情况下,如果读者是活跃的并且 作家进入锁然后没有 后续读者将被授予 直到那个作家之后的读锁 已获取并释放写入 锁。


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

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

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

    是的

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多