【发布时间】:2015-05-24 06:02:00
【问题描述】:
我有一个多线程程序,我在其中创建了一个公允价值为 true 的 ReadWriteLock 实例。 此应用程序已停止响应。
以下是我们基于线程转储的发现。 一个线程获得了读锁,并在执行期间阻塞了 DB 操作。很长时间没有释放锁。
除了上述线程之外,还有三个线程。 一个线程正在等待获取写锁。 而另外两个线程正在等待获取读锁。
问题是为什么两个线程都在等待读锁? 是否因为公允价值为真并且请求写锁的线程早于请求读锁的两个线程而发生? 如果请求写的线程来得早,系统会阻塞请求读锁的线程吗?
【问题讨论】:
-
你能发布线程转储吗?如果 writeLock 被持有,线程只会在 readLock 上阻塞。
标签: multithreading reentrantreadwritelock