应用启动,弹出对话框,死锁。这个问题在某个机器上很容易出现,在其他机器上则很难。原因是什么呢?
写了个简单的程序,弹出对话框并不死
启动了一个线程,在线程中弹出对话框
这个问题好解决。
分析
同事仔细研究了以下死锁:
"AWT-EventQueue-0" #12 prio=6 os_prio=31 tid=0x00007f8d85aed800 nid=0xbe37 runnable [0x000070000b881000] java.lang.Thread.State: RUNNABLE at sun.lwawt.macosx.CWrapper$NSWindow.isKeyWindow(Native Method) "AppKit Thread" #9 daemon prio=5 os_prio=31 tid=0x00007f8d85380800 nid=0x103 waiting for monitor entry [0x00007ffedfdfc000] java.lang.Thread.State: BLOCKED (on object monitor) at java.awt.Component.getLocationOnScreen(Component.java:2036)
二者一个等待一个死锁。同事猜测是重载对话框后,重载getExtendedState()调用导致函数的。去掉正常。
这也是常见的事情。