Multithreading 读写锁线程等待读锁

Multithreading 读写锁线程等待读锁,multithreading,reentrantreadwritelock,Multithreading,Reentrantreadwritelock,我有一个多线程程序,其中我创建了一个ReadWriteLock实例,其公允值为true。 此应用程序已停止响应 下面是我们基于线程转储的发现。 一个线程获得了读锁,并在执行过程中在DB操作中阻塞了读锁。它很长一段时间没有释放锁 除上述线程外,还有三个线程。 一个线程正在等待获取写锁。 然而,另外两个线程正在等待获取读锁 问题是为什么两个线程都在等待读锁? 这是因为公平值为真,并且请求写锁的线程比请求读锁的两个线程来得早吗? 如果线程请求写的时间提前,系统会阻止请求读锁的线程吗?当您将Java R

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

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

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

问题是为什么两个线程都在等待读锁? 这是因为公平值为真,并且请求写锁的线程比请求读锁的两个线程来得早吗?
如果线程请求写的时间提前,系统会阻止请求读锁的线程吗?

当您将Java ReentrantReadWriteLock的公平性值设置为true时,如果有线程正在等待获取写锁,那么获取读锁的尝试将被阻止,正如您猜测的那样。从Javadoc:

试图获取公平读取锁(非可重入)的线程将在写入锁被持有或存在等待写入线程时阻塞


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

您可以发布线程转储吗?只有在保持写锁的情况下,线程才会阻塞读锁。