В Java threaddump я нашел следующее:
"TP-Processor184" daemon prio=10 tid=0x00007f2a7c056800 nid=0x47e7 waiting for monitor entry [0x00007f2a21278000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.jackrabbit.core.state.SharedItemStateManager.getNonVirtualItemState(SharedItemStateManager.java:1725)
- locked <0x0000000682f99d98> (a org.apache.jackrabbit.core.state.SharedItemStateManager)
at org.apache.jackrabbit.core.state.SharedItemStateManager.getItemState(SharedItemStateManager.java:257)
"TP-Processor137" daemon prio=10 tid=0x00007f2a7c00f800 nid=0x4131 waiting for monitor entry [0x00007f2a1ace7000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.jackrabbit.core.state.SharedItemStateManager.getNonVirtualItemState(SharedItemStateManager.java:1725)
- locked <0x0000000682f99d98> (a org.apache.jackrabbit.core.state.SharedItemStateManager)
at org.apache.jackrabbit.core.state.SharedItemStateManager.getItemState(SharedItemStateManager.java:257)
Дело в том, что оба потока заблокировали монитор < 0x0000000682f99d98 > (независимо от того, что они ждут сейчас еще двух других мониторов).
При просмотре анализатора потоков Dump, при выборе этого монитора, он действительно говорит "Монитор блокировки потоков: 2" внизу и "2 Thread (s) lock". Пожалуйста, смотрите https://lh4.googleusercontent.com/-fCmlnohVqE0/T1D5lcPerZI/AAAAAAAAD2c/vAHcDiGOoMo/s971/locked_by_two_threads_3.png для скриншота, мне не разрешено вставлять изображения здесь.
Означает ли это, что threaddumps не являются атомарными относительно информации блокировки монитора? Я не могу себе представить, что это действительно ошибка блокировки JVM (1.6.0_26-b03).
Подобный вопрос уже задан в Может ли несколько потоков удерживать блокировку на одном мониторе в Java?, но ответ на мой вопрос не видел реальной точки нескольких потоков, блокирующих один и тот же монитор, даже если они могут ждать другого.
Обновление 13 мая 2014 года:
Новый вопрос Несколько потоков имеют одну и ту же блокировку? имеет код для воспроизведения поведения, а @rsxg подал соответствующий отчет об ошибке https://bugs.openjdk.java.net/browse/JDK-8036823 в соответствии с его ответом здесь.