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,which is held by "TP-Processor16"
"TP-Processor16":
waiting for ownable synchronizer 0x00002aaaf58e70f0,which is held by "indexTrackerThread3"
我们可以看到indexTrackerThread3正在等待TP-Processor16持有的资源,反之亦然.这确实是一个僵局.
我们可以看到indexTrackerThread3正在等待0x00002aaaf4394580:
"indexTrackerThread3":
- parking to wait for <0x00002aaaf4394580>
我的问题:
在the threads dump,为什么没有行锁定< 0x00002aaaf4394580> ?
似乎0x00002aaaf58e70f0实际上没有被任何线程锁定.什么可以锁定它?
在我读过的所有死锁文档(example)中,对于每个不同的停车场等待< 0x123>线,总有一个 – 锁定< 0x123>线.所以我开始怀疑JVM错误.我误会了什么吗?
注意:很抱歉链接到pastebin,但如果没有完整的转储,问题就无法回答.为简洁起见,我删除了包含“at”的所有行,它们不包含任何锁定信息.
最佳答案