Мы столкнулись с необычным тупиком во время запуска нашего приложения 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)
...
Кроме того, я заметил this thread, в котором упоминается, что доступ к статической переменной могут быть вовлечены. Это также имеет место в нашем приложении. Линия в getEAOTableLite в вопросе ссылается на статический метод.
Я читаю это право, что два вызова 'Component.setFont' происходят за пределами потока отправки событий? Являются ли они результатом вашего кода? – kschneid
Да, они были ... Я заметил это после того, как я опубликовал первоначальный вопрос. Наверное, у меня были свои шторы, когда я впервые прочитал трассу. Вы можете увидеть мой ответ ниже. –