【问题标题】:Read and Write Lock threads waiting on Read lock读锁和写锁线程等待读锁
【发布时间】:2015-05-24 06:02:00
【问题描述】:

我有一个多线程程序,我在其中创建了一个公允价值为 true 的 ReadWriteLock 实例。 此应用程序已停止响应。

以下是我们基于线程转储的发现。 一个线程获得了读锁,并在执行期间阻塞了 DB 操作。很长时间没有释放锁。

除了上述线程之外,还有三个线程。 一个线程正在等待获取写锁。 而另外两个线程正在等待获取读锁。

问题是为什么两个线程都在等待读锁? 是否因为公允价值为真并且请求写锁的线程早于请求读锁的两个线程而发生? 如果请求写的线程来得早,系统会阻塞请求读锁的线程吗?

【问题讨论】:

  • 你能发布线程转储吗?如果 writeLock 被持有,线程只会在 readLock 上阻塞。

标签: multithreading reentrantreadwritelock


【解决方案1】:

当您将 Java ReentrantReadWriteLock 的公平值设置为 true 时,如果有一个线程当前正在等待获取写锁,那么获取读锁的尝试将会阻塞,正如您推测的那样。来自 Javadoc:

“如果持有写锁或有等待写入线程,则尝试获取公平读锁(不可重入)的线程将阻塞。”

在你的情况下,一旦当前读取完成,等待写入的线程将被允许写入,然后其他等待读取的线程将被允许读取。

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多