IBM JVM版本7中未知锁定的所有者

时间:2014-12-13 06:27:18

标签: java jvm locking ibm-jdk

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

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

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

1 个答案:

答案 0 :(得分: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(这是此答案的来源)。