代码之家  ›  专栏  ›  技术社区  ›  Lehane

JavaReNeReTrAdTrrrErLoCK请求

  •  0
  • Lehane  · 技术社区  · 15 年前

    只是一个关于Java中的Read RealLoCox的快速问题(具体是ReNeReTrAdRead LeLoCK实现),因为我不清楚Sun文档。

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

    谢谢

    2 回复  |  直到 12 年前
        1
  •  3
  •   Thilo    15 年前

    JavaDoc解释了这一点:

    这个类不强制读者 或编写器首选项排序 锁定访问。但是,它确实支持 可选的 公平 政策。如果建造得公平, 线程使用 近似到货单政策。 当释放写锁时 要么是等待时间最长的单曲 写入程序将被分配写入 锁定,或者如果有读卡器正在等待 比任何作家都长 将为读卡器分配读卡器 锁。当构造为不公平时, 进入锁的顺序需要 不在到货单中。在任一 如果读卡器处于活动状态, 写入程序进入锁,然后不 将授予后续读者 在那个作者之后的读取锁 已经获得并发布了 锁。


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

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

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

    是的

        2
  •  1
  •   Tom Hawtin - tackline    15 年前

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