java - 是否是Timer线程导致死锁发生?

标签 java netty deadlock nsq

enter image description here

Timer-2 线程正在等待 0x00000000e1a23398,并且它还锁定 0x00000000e1a23398。这种情况会导致Timer-2线程死锁吗? 谁能帮我解释一下吗?

最佳答案

这并不是死锁的证据。

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?

  1. 查看日志文件。
  2. 检查配置(或其他内容)以找出它尝试连接的服务的主机/端口。
  3. 检查服务是否正在运行
  4. 检查客户端是否可以访问
  5. 深入研究源代码
  6. 调试、摸不着头脑等等。
  7. 作为最后的手段,请聘请顾问。

关于java - 是否是Timer线程导致死锁发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52406298/

相关文章:

java - 不处理 Apache tile 定义中的 EL 表达式

java - Netty.writeAndFlush with future 成功杀死主机

java - Netty 处理程序的调用顺序是什么?

java - 如何将 mongo 中的 Criteria 与 TextCriteria 与 spring java 驱动程序结合起来?

java - 微服务的集中式日志包装器

java - 在没有 closeFuture().sync() 的情况下在 Netty 中运行多个服务器

即使回调 IsOneWay,WCF 客户端也因回调而死锁

c# - 异步方法永不返回

go - 为什么我有一个死锁,即使它包含一个无限循环?

java - 通用方法参数 - Java