我有一个 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);
在哪里:
a
,b
和c
是局部BigDecimal
变量。MATH_CONTEXT
是一个public final static
变量,只能在 XXX.java 中访问
我的问题(回答其中任何一个都会有很大帮助)
- 这是死锁或活跃度问题的证据(线程似乎没有取得进展,但它处于
RUNNABLE
状态)? - 这是冻结的可能原因还是我应该看看其他地方?
- 解决问题的下一步是什么?