java - 线程转储分析(AWT-EventQueue 可运行但等待条件)

标签 java multithreading concurrency thread-dump

我有一个 swing 应用程序,它在某个(随机)时间后卡住。我在它卡住后每 10 秒拍摄 5 个线程快照,它们都包含这些完全相同的行:

"AWT-EventQueue-0" prio=6 tid=0x0000000009949000 nid=0x7bec waiting on condition [0x000000000ebbc000]
  java.lang.Thread.State: RUNNABLE
      at java.math.BigInteger.valueOf(Unknown Source)
      at java.math.BigDecimal.inflate(Unknown Source)
      at java.math.BigDecimal.add(Unknown Source)
      at uk.co.xx.xxx.xxxx.XXX$4.get(XXX.java:171)

请注意,线程转储中没有其他线程在 XXX.java 中。 相应的代码行 (XXX.java:171) 看起来有些无礼:

a = a.add(b.multiply(c, MATH_CONTEXT), MATH_CONTEXT);

哪里:

  • abc 是局部 BigDecimal 变量。
  • MATH_CONTEXT 是一个public final static 变量,只能在 XXX.java 中访问

我的问题(回答其中任何一个都会有很大帮助)

  • 这是死锁或 active 问题的证据(线程似乎没有取得进展,但它处于 RUNNABLE 状态)?
  • 这是卡住的可能原因还是我应该看看其他地方?
  • 解决问题的下一步是什么?

最佳答案

Is this evidence of a deadlock or liveness issue (the thread does not seem to make progress but it is in RUNNABLE state)?

我怀疑。由于程序卡住,显然存在问题。但是,我怀疑您显示的代码存在死锁。

Is this the likely reason for the freeze or should I look somewhere else?

我认为这很可能是转移注意力,问题出在其他地方。

What would be the next step to solve the problem?

我个人会研究潜在的内存分配和垃圾回收问题。特别是,我会确保该程序不会将所有时间都花在收集垃圾上,因此无法取得进展。

为此,我会使用内存分析器。

在我这样做的同时,我还会监视进程的总体 CPU 和内存使用情况,以及页面错误统计信息(以查看是否存在过度交换)。

关于java - 线程转储分析(AWT-EventQueue 可运行但等待条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10717842/

相关文章:

java - TestNG + Spring 测试 : EntityManager return null with testng

java - 使用 Grails 查找现有的 ShiroRoles 添加到新的 ShiroUser 中?

c# - 不一致 "Cross-thread operation not valid"异常

ios - 为什么 NSOperation 在上一个操作完成之前就开始了?

java - 多线程代码对于很多工作人员来说太慢,但对于很少的工作人员来说速度很快

Java并发预订退款方法

java - 在 CPLEX Java API 中对目标函数建模

java - Spring:如何从一个对象中提取数据并将其插入到另一个对象中

c++ - 如何获取当前线程的std::thread?

java - Swing:区分用户引起的组件大小调整和自动组件大小调整的问题(编写自定义布局管理器)