JVMが私に語ったスレッドによってロックされていないことを示しています「1つのデッドロックを発見」が、トレースは任意のデッドロックが発生したことを
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
が保有するリソースを待っていることを見ることができ、かつ副-versa。それは確かにデッドロックです。
我々はindexTrackerThread3
が0x00002aaaf4394580
を待っていることがわかります。
"indexTrackerThread3":
- parking to wait for <0x00002aaaf4394580>
私の質問:the threads dumpで
、なぜ何のライン- locked <0x00002aaaf4394580>
はありませんか?
0x00002aaaf58e70f0は実際にはどのスレッドでもロックされていないようです。何がそれをロックすることができますか?
すべての異なる- parking to wait for <0x123>
行に対して、私が読んだデッドロックのドキュメント(example)には常に- locked <0x123>
という行が1つあります。だから私はJVMのバグを疑うようになる。私は何かを誤解していますか?
注:pastebinにリンクして申し訳ありませんが、完全なダンプを実行しないと問題は解決できません。簡潔にするため、「at」を含むすべての行を削除しましたが、ロック情報は含まれていません。
リンクありがとうございます!私は今Unsafeクラスに精通しています。 Unsafe.parkを呼び出してもロックはJava呼び出しから引き続き行われるため、なぜロックされた '<0x123> '部分はその行に書き込まれませんか?私はidが存在しないという特定の問題について話しているドキュメントを読んでいただければ幸いです。 –