У меня есть приложение поворота, которое зависает после некоторого (случайного) времени. Я взял 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