调试Java同步问题

14

在Eclipse调试环境中,是否有机制可以查看已持有的同步锁状态和等待的进程?


你正在调试可能的死锁吗? - aioobe
我遇到了一个意外的死锁,但只能从一堆莫名其妙停滞的进程中"猜测"可能是这种情况。应该有更好的方法。 - ddyer
3个回答

13

1
谢谢。我无法想象为什么监视器的视图默认是关闭的。 - ddyer
可能只有在寻找由同步语句引起的死锁时才能奏效。我目前正在寻找由ReentrantReadWriteLock引起的死锁,但是我从Eclipse中没有得到这种信息。 - Scheintod
该链接已失效, eclipsezone.com 网站似乎已不复存在。 - TMG
@TMG 我已经更新了答案,并附上了互联网档案馆缓存版本的链接。我不知道这篇文章现在是否已经过时,因为它相当古老。 - T .
我也不确定是否可以将内容复制粘贴到我的答案中... - T .

1

此处所建议,如果您使用Sun JVM,可以执行以下步骤:

  1. 启动jconsole或jvisualvm(两者都在JDK安装的bin目录中)
  2. 附加到您怀疑已经锁定的进程
  3. 转到线程窗格。有一个“检测死锁”按钮

0
另一个选项:我建议添加日志记录以便“调试”您的代码。有时这会更直观。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接