最佳答案
这并不是死锁的证据。
Timer-2 已获取 TaskQueue
对象的锁,并正在等待同一对象的通知。事实上,如果线程在调用 Object.wait()
时没有持有锁,它就会收到 IllegalMonitorStateException
。
我并不是说你的应用程序根本没有陷入僵局。然而,两个线程“Timer-1”和“Timer2-”都在等待其他线程通知它们。这不是典型的死锁,其中两个线程都在等待对方释放锁。
<小时/>我还能弄清楚什么?
那么,从java.util.Timer
的代码来看:
“Timer-2”线程只是等待下一次计时器触发。对于
计时器
来说,这是完全正常的行为。“Timer-1”线程正在执行计时器任务。它似乎正在尝试创建与(可能是)远程服务的 NSQ 连接。如果它阻塞,则可能意味着它尝试连接的服务由于某种原因无法访问。
如果不深入研究“com.trendrr.nsq”源代码,就无法从堆栈转储中收集到更多信息。
<小时/>Is there any idea that can be used to find the cause reason?
- 查看日志文件。
- 检查配置(或其他内容)以找出它尝试连接的服务的主机/端口。
- 检查服务是否正在运行
- 检查客户端是否可以访问
- 深入研究源代码
- 调试、摸不着头脑等等。
- 作为最后的手段,请聘请顾问。
关于java - 是否是Timer线程导致死锁发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52406298/