我有一个swing应用程序,它在一些(随机)时间后冻结。我已5个快照每10秒它冻结后,他们都包含这些完全相同的线路:线程转储分析(AWT-EventQueue可运行但等待条件)
"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
状态)? - 这是冻结的可能原因还是我应该找别的地方?
- 解决问题的下一步是什么?
是行171同步(方法或块级别)? –
@ejb_guy no - 围绕该部分代码不进行同步。 – assylias