我有一种情况,很多线程在某些ReentrantReadWriteLock上被阻塞,但是由于某种原因,所有者是未知的。
3XMTHREADBLOCK Parked on:
java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync@0xC3C0E5E8 Owned by: <unknown>这是因为所有者线程已经存在吗?
为什么JVM不释放锁?
还有其他原因吗?
发布于 2014-12-15 12:20:48
此线程被停放,而不是阻塞。线程通过java.util.concurrent API进入停放状态。
如果提供了拦截器对象,则将已停放的线程列在传递给基础java.util.concurrent.locks.LockSupport.park()方法的阻止程序对象上。如果未提供阻止程序对象,则将线程列为Parked on: <unknown>。
如果传递给park()方法的对象扩展了java.util.concurrent.locks.AbstractOwnableSynchronizer类,并使用该类的方法来跟踪拥有的线程,则会显示有关拥有线程的信息。如果对象不使用AbstractOwnableSynchronizer类,则将所属线程列为<unknown>。
要获得更详细的信息,请查看IBM中的阻塞线程信息 (这是这个答案的来源)。
https://stackoverflow.com/questions/27456187
复制相似问题