2014-12-13 13 views
0

我有一些情况,在某些ReentrantReadWriteLock上阻塞了很多线程,但由于某些原因未知所有者。IBM JVM版本7中未知的锁的拥有者

3XMTHREADBLOCK  Parked on: 
java/util/concurrent/locks/[email protected] Owned by: <unknown> 

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

回答

0

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