1

在此处输入图像描述

Timer-2 线程在 0x00000000e1a23398 上等待,同时它也在锁定 0x00000000e1a23398。这种情况会导致 Timer-2 线程死锁吗?任何人都可以为我解释一下吗?

4

1 回答 1

2

这不是僵局的证据。

Timer-2 已获得TaskQueue对象上的锁定,并正在等待同一对象上的通知。事实上,如果线程在它调用的时候没有持有锁,Object.wait()它就会得到一个IllegalMonitorStateException.

我并不是说您的应用程序根本没有陷入僵局。但是,两个线程“Timer-1”和“Timer2-”都在等待其他线程通知它们。这不是典型的死锁,两个线程都在等待另一个释放锁。


我还能弄清楚什么?

好吧,从查看以下代码java.util.Timer

  • “Timer-2”线程只是在等待下一次定时器触发。这对于 a 来说是完全正常的行为Timer

  • “Timer-1”线程正在执行定时器任务。它似乎正在尝试创建与(可能)远程服务的 NSQ 连接。如果它被阻塞,那可能意味着它试图连接的服务由于某种原因而无法访问。

没有更多可以从堆栈转储中收集到的信息......没有深入研究“com.trendrr.nsq”源代码。


有什么想法可以用来查找原因吗?

  1. 查看日志文件。
  2. 检查配置(或其他)以找出它尝试连接的服务的主机/端口。
  3. 检查服务是否正在运行
  4. 检查它是否可以从客户端访问
  5. 深入了解源代码
  6. 调试,挠头等等。
  7. 作为最后的手段,聘请顾问。
于 2018-09-19T13:19:01.757 回答