Владелец блокировки неизвестен в IBM JVM версии 7
У меня есть ситуация, когда множество потоков заблокированы на некоторых ReentrantReadWriteLock, но по какой-то причине владелец не известен.
3XMTHREADBLOCK Parked on:
java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync@0xC3C0E5E8 Owned by: <unknown>
Это потому, что существует поток владельца?
Почему JVM не снимает блокировку?
Могут ли быть другие причины?
1 ответ
Эта тема припаркована и не заблокирована. Потоки входят в припаркованное состояние через java.util.concurrent
API.
Припаркованные потоки перечислены как припаркованные на объекте-блокираторе, который был передан в базовый java.util.concurrent.locks.LockSupport.park()
метод, если такой объект был предоставлен. Если объект-блокировщик не был предоставлен, потоки отображаются как Parked on: <unknown>
,
Если объект, который был передан в park()
метод расширяет java.util.concurrent.locks.AbstractOwnableSynchronizer
class, и использует методы этого класса для отслеживания потока-владельца, затем отображается информация о потоке-владельце. Если объект не использует AbstractOwnableSynchronizer
класс, поток-владелец указан как <unknown>
,
Более подробную информацию смотрите в информации о заблокированных потоках в центре знаний IBM (который является источником этого ответа).