0

我有一种情况,许多线程在某些 ReentrantReadWriteLock 上被阻塞,但由于某种原因,所有者不知道。

3XMTHREADBLOCK     Parked on:
java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync@0xC3C0E5E8 Owned by: <unknown>

这是因为所有者线程已经存在吗?
为什么JVM不释放锁?
还能有其他原因吗?

4

1 回答 1

0

此线程已停放且未阻塞。java.util.concurrent线程通过API进入停放状态。
如果提供了这样的对象,则停放的线程被列为停放在传递给底层java.util.concurrent.locks.LockSupport.park()方法的阻止程序对象上。如果未提供阻止程序对象,则线程被列为Parked on: <unknown>.
如果传递给该park()方法的对象扩展了java.util.concurrent.locks.AbstractOwnableSynchronizer该类,并使用该类的方法来跟踪拥有线程,则显示有关拥有线程的信息。如果对象不使用AbstractOwnableSynchronizer该类,则拥有线程被列为<unknown>
有关更多详细信息,请查看IBM 知识中心中的Blocked thread information(这是此答案的来源)。

于 2014-12-15T12:20:48.937 回答