加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – “Found 1 deadlock”但跟踪显示未被任何线程锁定

发布时间:2020-12-14 19:20:03 所属栏目:Java 来源:网络整理
导读:JVM告诉我发生了死锁: Found one Java-level deadlock:============================="TP-Processor107": waiting for ownable synchronizer 0x00002aaaf58e70f0,(a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),which is held by "ind

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”的所有行,它们不包含任何锁定信息.

最佳答案
java.util.concurrent包使用了一种外来的本机停放机制(以及其他本机机制,例如原子比较和交换).你可以看到我在说什么here.

您描述的通常在线程转储中出现的模式源于经典Java惯用法(lock){lock.wait(); }.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读