«Найден 1 тупик», но трассировка показывает, что он не заблокирован ни одним потоком

JVM сообщает мне, что произошла взаимоблокировка:

Found one Java-level deadlock:
=============================
"TP-Processor107":
  waiting for ownable synchronizer 0x00002aaaf58e70f0, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
  which is held by "indexTrackerThread3"
"indexTrackerThread3":
  waiting for ownable synchronizer 0x00002aaaf4394580, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
  which is held by "TP-Processor16"
"TP-Processor16":
  waiting for ownable synchronizer 0x00002aaaf58e70f0, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
  which is held by "indexTrackerThread3"

Мы видим, что indexTrackerThread3ожидает ресурса, удерживаемого TP-Processor16, и наоборот -. Это действительно тупик.

Мы видим, что indexTrackerThread3ждет0x00002aaaf4394580:

"indexTrackerThread3":
    - parking to wait for  <0x00002aaaf4394580>

Мой вопрос:

В дамп потоков , почему нет строки - locked <0x00002aaaf4394580>?

Похоже, что 0x00002aaaf58e70f0 на самом деле не заблокирован ни одним потоком. Что может его заблокировать?

Во всей документации по взаимоблокировкам, которую я читал(пример), для каждой отдельной строки - parking to wait for <0x123>всегда есть одна строка - locked <0x123>. Поэтому я начинаю подозревать ошибку JVM. Я что-то неправильно понимаю?

Примечание :Извините за ссылку на pastebin, но без полного дампа на вопрос нельзя ответить. Для краткости я удалил все строки, содержащие «at», они не содержат никакой информации о блокировке.

6
задан Nicolas Raoul 28 June 2012 в 08:28
поделиться