У меня возникают трудности с пониманием дампа потока, который я получил из jstack для веб-приложения MVC Spring, работающего на Tomcat 6 (java 1.6.0_22, Linux).
Я вижу блокирующие потоки (которые заставляют другие потоки ждать), которые блокируются сами, однако дамп потока не говорит мне, почему или для какого монитора они ждут.
Пример:
"TP-Processor75" daemon prio=10 tid=0x00007f3e88448800 nid=0x56f5 waiting for monitor entry [0x00000000472bc000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3067)
- locked <0x00007f3e9a0b3830> (a java.lang.Class for org.catapultframework.resource.ResourceObject)
at java.lang.Class.getAnnotation(Class.java:3029)
...
т.е. Мне не хватает строки "Ожидание блокировки..." в трассировке стека. По-видимому, поток блокирует объект класса, но я не понимаю, почему сам поток заблокирован.
Нисходящий дамп не содержит никаких подсказок для тупиков.
Что я могу сделать, чтобы идентифицировать монитор блокировки?
Спасибо, Оливер