Возможно (хотя и маловероятно), что поток только что освободил монитор, когда был сделан дамп потока.Между освобождением монитора и получением следующего потока может быть короткий период.Если вы не в тупике, это может объяснить, что вы видите.Попробуйте другой дамп потока и проверьте его.
Скорее всего, где-то есть поток, который уже содержит монитор.Иногда это не очевидно.У ваших трассировок стека есть несколько «заблокированных» строк, в которых перечислены потоки, которые содержат определенные блокировки, но этот список не обязательно завершен.Например, я подозреваю, что блокировки, полученные с помощью JNI, не перечислены.
Если вы могли бы заменить встроенную блокировку, например, java.util.concurrent.locks.ReentrantLock
, то вы можете приостановить программу и присоединить отладчик, найти блокировку.вы заботитесь о владельце блокировки и используете метод getOwner
.