"1 deadlock found", but the trace shows that no thread is blocked

The JVM tells me that a deadlock has occurred:

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"

We see what indexTrackerThread3awaits the resource stored in TP-Processor16, and vice versa. This is really a dead end.

We see what indexTrackerThread3awaits 0x00002aaaf4394580:

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

My question is:

In dump threads , why is there no line - locked <0x00002aaaf4394580>?

It seems that 0x00002aaaf58e70f0 is not actually locked by the thread. What could be blocked?

In all the dead end docs that I read ( example ), for every single line - parking to wait for <0x123>there is always one - locked <0x123>line. So I'm starting to suspect a JVM error. I do not understand something?

: pastebin, . , "at", .

+5
5

java.util.concurrent , ( , ). , .

, , , Java idiom synchronized(lock) { lock.wait(); }.

+4

.

, JProfiler , java.util.concurrent.

: JProfiler

0

java, , , .

, , Condition, .

ThreadMXBean.findDeadlockedThreads ThreadMXBean.findMonitorDeadlockedThreads .

, java 5.

waiting to lock <0x123> locked <0x123> . java 5 . - parking to wait for <0x456>. 0x456 , . .

0

java.util.concurrent. , Java. , , WRITE Thread, READ. , concurrency.

. , Java-, JVM (- READ, ). Java .

0

, 0x00002aaaf4394580 . - Java # 6822370. .

0

All Articles