Мы столкнулись со странным тупиком во время запуска нашего Java-приложения. Когда я запускаю jstack в приложении для исследования, я вижу, что AWT-EventQueue находится в Object.wait(), но поток по-прежнему помечен как RUNNABLE. Я включил соответствующие части дампа потока и надеюсь, что кто-то сможет пролить свет на эту проблему.
"AWT-EventQueue-0" prio=6 tid=0x5f0a2400 nid=0x19e4 in Object.wait() [0x6007e000]
java.lang.Thread.State: RUNNABLE
at com.ge.med.platinum.work.isu.ExamTransaction.getEAOTableLite(ExamTransaction.java:1514)
...
- locked <0x1fc87448> (a java.awt.Component$AWTTreeLock)
...
"Thread-63-Pool-9" prio=6 tid=0x5f1a2800 nid=0x1f54 waiting for monitor entry [0x61a9f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.awt.Component.setFont(Component.java:1777)
- waiting to lock <0x1fc87448> (a java.awt.Component$AWTTreeLock)
...
"Thread-289-Pool-3" prio=6 tid=0x60afe800 nid=0x12b8 waiting for monitor entry [0x623fe000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.awt.Component.setFont(Component.java:1777)
- waiting to lock <0x1fc87448> (a java.awt.Component$AWTTreeLock)
...
Кроме того, я заметил эту ветку, в которой упоминается что может быть задействован доступ к статической переменной. Это также имеет место в нашем приложении. Рассматриваемая строка в getEAOTableLite ссылается на статический метод.
Component.setFont
происходят вне потока диспетчеризации событий? Это результат вашего кода? - person kschneid   schedule 16.09.2010