【发布时间】:2021-06-28 04:23:03
【问题描述】:
在 Eclipse 中调试我的 Java 应用程序期间,调试视图以红色文本颜色和锁定符号显示一些线程:
谁能解释一下这是什么意思?
我目前正在我的代码中寻找(潜在的)死锁。这就是为什么红线困扰我的原因。但是当我挂起 VM 时,这些线程显然不涉及死锁情况:
我研究了Eclipse help pages for Debug View,但没有找到任何解释。
编辑:正如@howlger 正确指出的那样,Eclipse Tips and Tricks (JDT) 页面上有一条注释,指出“......死锁中涉及的线程以红色呈现......”。但这是否也意味着死锁检测是将线程渲染为红色的唯一原因?如果是这样,我的情况可能只是日食内部启发式的误报。一旦我挂起我的虚拟机,eclipse 就会详细调查监视器的所有权,并发现没有实际的死锁情况。这也与挂起的线程外观一致(我在上面的第二个屏幕截图):挂起时线程突然不再是红色了。
【问题讨论】:
-
死锁检测是 Java VM 的一项功能,而不是 Eclipse 内部启发式。该文档非常清楚红色在这里的含义(请参阅我的回答)。当然,这是唯一的原因(否则将是违反 UI 准则的错误)。如果您想知道您的代码发生了什么,请通过将您的代码显示为minimal reproducible example 来作为一个单独的问题提出(并且请更具体,例如 deadlock situation 不是在UI 或文档,因此您需要指定它)。
-
在这个 DebugView 中,线程状态的偶尔不一致的可视化显然是很有可能的。它有时会出现在我的完整应用程序中。我试图用三个简单的线程在一个小例子中重现它。但后来效果并没有显现出来。我不认为它是一个错误或任何东西。我可以想象 Eclipse 并没有随时掌握所有确切信息。
-
我花时间回答了您的问题“Eclipse Debug View 中的红色线程是什么意思?” 并附上官方文档的链接。我问你在你的情况下线程是否永远等待,你没有回答。您写了关于“(潜在的)死锁” 和“显然没有涉及死锁情况” 的文章,其中显示了两个裁剪的屏幕截图。我能够重现带有死锁的屏幕截图,所以说它显然对于提供的信息没有意义。
-
请阅读code of conduct并考虑删除您的“我的印象是,您既没有试图理解我的问题,也没有帮助解决这个问题......” i> 评论,因为它既不好也不真实也不增加价值。