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», они не содержат никакой информации о блокировке.