繁体   English   中英

Java Swing 1.6 更新 23 JVM 使用小程序锁定

[英]Java Swing 1.6 update 23 JVM Locks using Applet

我目前有一个小程序,最近才发现它有问题,有时整个 JVM 会锁定并变得无响应,包括 Java 控制台。

我拥有的 Applet 中用于更新 UI 的任何代码都在事件调度线程上运行。 当 JVM 锁定时,我使用 JVisualVM 提供 JVM 的线程转储。 我将 output 附在下面。 从我所看到的是有 3 个 Event Queues,但更令人担忧的是,我认为有 2 个 EventDispatch 线程在运行,并且在一个致命的拥抱中相互阻塞。

小程序中的场景如下,用户希望浏览文本字段,因此我们启动托管在 JInternalFrame window 中的浏览 window,用户选择他们想要的值,然后将该值插入到 TextField 中,浏览 Z05B8C74CBD9702FBF2DE4被解雇。

据我所见,线程 AWT-EventQueue-2 正在更新 EDT 上的字段,并已获取 javax.swing.text.AbstractDocument.replace() 中的 writeLock 并尝试使文本字段无效,但一直等到线程 AWT-EventQueue -0 释放 Treelock,但是 AWT-EventQueue-0 正在等待同一字段上的 readlock() 但不会继续进行,直到线程 AWT-EventQueue-2 释放 writelock,因此相互锁定。 我不明白的是,似乎至少有 2 个 EDT。

我知道我在这里可能很愚蠢,但任何人都可以对这个问题有所了解。 提前致谢。

我的问题是,你认为这是一个 JVM 错误吗

这里感兴趣的线程是 AWT-EventQueue-1、AWT-EventQueue-2 和 AWT-EventQueue-0。

2011-05-26 12:32:43
Full thread dump Java HotSpot(TM) Client VM (19.0-b09 mixed mode, sharing):

"JMX server connection timeout 1480" daemon prio=6 tid=0x048d0800 nid=0xbac in Object.wait() [0x056ef000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(Unknown Source)
    - locked  (a [I)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"RMI Scheduler(0)" daemon prio=6 tid=0x04a72800 nid=0xf74 waiting on condition [0x047cf000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for   (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
    at java.util.concurrent.DelayQueue.take(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"RMI TCP Connection(2)-172.16.10.136" daemon prio=6 tid=0x0494c800 nid=0x7b8 runnable [0x0462f000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    - locked  (a java.io.BufferedInputStream)
    at java.io.FilterInputStream.read(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    -  (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"RMI TCP Accept-0" daemon prio=6 tid=0x050b0400 nid=0x860 runnable [0x036df000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(Unknown Source)
    - locked  (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(Unknown Source)
    at java.net.ServerSocket.accept(Unknown Source)
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"NativeSwing Receiver - Swing" daemon prio=4 tid=0x04aafc00 nid=0x164 runnable [0x0471f000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    - locked  (a java.io.BufferedInputStream)
    at java.io.ObjectInputStream$PeekInputStream.peek(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.peek(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readUnshared(Unknown Source)
    at chrriis.dj.nativeswing.swtimpl.OutProcessSocketsMessagingInterface.readMessageFromChannel(OutProcessSocketsMessagingInterface.java:113)
    at chrriis.dj.nativeswing.swtimpl.MessagingInterface$2.run(MessagingInterface.java:361)

   Locked ownable synchronizers:
    - None

"NativeSwing Stream Connector" daemon prio=4 tid=0x04915800 nid=0xf04 runnable [0x0569f000]
   java.lang.Thread.State: RUNNABLE
    at java.io.FileInputStream.readBytes(Native Method)
    at java.io.FileInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    - locked  (a java.io.BufferedInputStream)
    at java.io.FilterInputStream.read(Unknown Source)
    at chrriis.dj.nativeswing.swtimpl.NativeInterface$OutProcess$1.run(NativeInterface.java:801)

   Locked ownable synchronizers:
    - None

"NativeSwing Stream Connector" daemon prio=4 tid=0x03330400 nid=0xe24 runnable [0x0564f000]
   java.lang.Thread.State: RUNNABLE
    at java.io.FileInputStream.readBytes(Native Method)
    at java.io.FileInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    - locked  (a java.io.BufferedInputStream)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    - locked  (a java.io.BufferedInputStream)
    at java.io.FilterInputStream.read(Unknown Source)
    at chrriis.dj.nativeswing.swtimpl.NativeInterface$OutProcess$1.run(NativeInterface.java:801)

   Locked ownable synchronizers:
    - None

"WebServer" daemon prio=4 tid=0x0489b400 nid=0xfc8 runnable [0x055ff000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(Unknown Source)
    - locked  (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(Unknown Source)
    at java.net.ServerSocket.accept(Unknown Source)
    at chrriis.common.WebServer$1.run(WebServer.java:720)

   Locked ownable synchronizers:
    - None

"Registry cleanup thread" daemon prio=4 tid=0x04ad9400 nid=0xf94 waiting on condition [0x055af000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at chrriis.common.ObjectRegistry$1.run(ObjectRegistry.java:31)

   Locked ownable synchronizers:
    - None

"Registry cleanup thread" daemon prio=4 tid=0x04c37400 nid=0x2e4 waiting on condition [0x054df000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at chrriis.common.ObjectRegistry$1.run(ObjectRegistry.java:31)

   Locked ownable synchronizers:
    - None

"TimerQueue" daemon prio=4 tid=0x03378000 nid=0xa0 in Object.wait() [0x0486f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at javax.swing.TimerQueue.run(Unknown Source)
    - locked  (a javax.swing.TimerQueue)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"ConsoleWriterThread" daemon prio=6 tid=0x032b1400 nid=0x398 in Object.wait() [0x0476f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at com.sun.deploy.util.ConsoleTraceListener$ConsoleWriterThread.run(Unknown Source)
    - locked  (a java.lang.Object)

   Locked ownable synchronizers:
    - None

"Windows Tray Icon Thread" prio=6 tid=0x032a7800 nid=0xdbc runnable [0x046cf000]
   java.lang.Thread.State: RUNNABLE
    at com.sun.deploy.ui.WindowsJavaTrayIcon.mainLoop(Native Method)
    at com.sun.deploy.ui.WindowsJavaTrayIcon.access$700(Unknown Source)
    at com.sun.deploy.ui.WindowsJavaTrayIcon$2.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"TimerQueue" daemon prio=6 tid=0x032a2800 nid=0xf78 in Object.wait() [0x0467f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a javax.swing.TimerQueue)
    at javax.swing.TimerQueue.run(Unknown Source)
    - locked  (a javax.swing.TimerQueue)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"thread applet-ClientApplet.class-1" prio=4 tid=0x03281400 nid=0x85c in Object.wait() [0x045df000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a java.lang.Object)
    at java.lang.Object.wait(Object.java:485)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    - locked  (a java.lang.Object)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"AWT-EventQueue-1" prio=6 tid=0x0325b400 nid=0xe94 waiting for monitor entry [0x0457f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - waiting to lock  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
    at javax.swing.RepaintManager.paint(Unknown Source)
    at javax.swing.JComponent._paintImmediately(Unknown Source)
    at javax.swing.JComponent.paintImmediately(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"AWT-EventQueue-2" prio=4 tid=0x03259800 nid=0xb0c waiting for monitor entry [0x0363f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.awt.Component.invalidate(Unknown Source)
    - waiting to lock  (a java.awt.Component$AWTTreeLock)
    at java.awt.Container.invalidate(Unknown Source)
    at javax.swing.JComponent.revalidate(Unknown Source)
    at javax.swing.plaf.basic.BasicTextUI$RootView.preferenceChanged(Unknown Source)
    at javax.swing.text.View.preferenceChanged(Unknown Source)
    at javax.swing.text.PlainView.updateDamage(Unknown Source)
    at javax.swing.text.PlainView.removeUpdate(Unknown Source)
    at javax.swing.text.FieldView.removeUpdate(Unknown Source)
    at javax.swing.plaf.basic.BasicTextUI$RootView.removeUpdate(Unknown Source)
    at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.removeUpdate(Unknown Source)
    at javax.swing.text.AbstractDocument.fireRemoveUpdate(Unknown Source)
    at javax.swing.text.AbstractDocument.handleRemove(Unknown Source)
    at javax.swing.text.AbstractDocument.remove(Unknown Source)
    at javax.swing.text.AbstractDocument.replace(Unknown Source)
    at javax.swing.text.JTextComponent.setText(Unknown Source)
    at JCFTextField.setFieldData(Unknown Source)
    at JCFTextField.JC_setData(Unknown Source)
    at CTetraAppCommsCallBack.JC_SetData(Unknown Source)
    at ClientCommsManager.processComponentMsg(Unknown Source)
    at ClientCommsManager.commsInput(Unknown Source)
    at HTTPCommsThread$2.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Applet 1 LiveConnect Worker Thread" prio=4 tid=0x03261800 nid=0xe3c in Object.wait() [0x044df000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source)
    - locked  (a java.lang.Object)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Browser Side Object Cleanup Thread" prio=6 tid=0x03255800 nid=0x29c in Object.wait() [0x037ff000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    - locked  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    at sun.plugin2.main.client.LiveConnectSupport$BrowserSideObjectCleanupThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"CacheCleanUpThread" daemon prio=6 tid=0x0322d000 nid=0x86c in Object.wait() [0x0377f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a com.sun.deploy.cache.CleanupThread)
    at java.lang.Object.wait(Object.java:485)
    at com.sun.deploy.cache.CleanupThread.run(Unknown Source)
    - locked  (a com.sun.deploy.cache.CleanupThread)

   Locked ownable synchronizers:
    - None

"CacheMemoryCleanUpThread" daemon prio=6 tid=0x03227c00 nid=0x554 in Object.wait() [0x0372f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    - locked  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    at com.sun.deploy.cache.MemoryCache$LoadedResourceCleanupThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Java Plug-In Heartbeat Thread" prio=6 tid=0x02d66c00 nid=0xdcc waiting on condition [0x034af000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at sun.plugin2.main.client.PluginMain$HeartbeatThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"AWT-EventQueue-0" prio=6 tid=0x02d6e400 nid=0xd9c in Object.wait() [0x0368d000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at javax.swing.text.AbstractDocument.readLock(Unknown Source)
    - locked  (a javax.swing.text.PlainDocument)
    at javax.swing.plaf.basic.BasicTextUI.paint(Unknown Source)
    at javax.swing.plaf.basic.BasicTextUI.update(Unknown Source)
    at javax.swing.JComponent.paintComponent(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JViewport.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JSplitPane.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    - locked  (a java.awt.Component$AWTTreeLock)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
    at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
    at javax.swing.RepaintManager.paint(Unknown Source)
    at javax.swing.JComponent._paintImmediately(Unknown Source)
    at javax.swing.JComponent.paintImmediately(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"AWT-Windows" daemon prio=6 tid=0x02cea800 nid=0x568 runnable [0x00a2f000]
   java.lang.Thread.State: RUNNABLE
    at sun.awt.windows.WToolkit.eventLoop(Native Method)
    at sun.awt.windows.WToolkit.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"AWT-Shutdown" prio=6 tid=0x02ce9c00 nid=0x608 in Object.wait() [0x0359f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at sun.awt.AWTAutoShutdown.run(Unknown Source)
    - locked  (a java.lang.Object)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Java2D Disposer" daemon prio=10 tid=0x02ccb800 nid=0x524 in Object.wait() [0x0354f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    - locked  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    at sun.java2d.Disposer.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Java Plug-In Pipe Worker Thread (Client-Side)" daemon prio=6 tid=0x0321c400 nid=0xbec runnable [0x034ff000]
   java.lang.Thread.State: RUNNABLE
    at sun.plugin2.os.windows.Windows.ReadFile0(Native Method)
    at sun.plugin2.os.windows.Windows.ReadFile(Unknown Source)
    at sun.plugin2.ipc.windows.WindowsNamedPipe.read(Unknown Source)
    at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.read(Unknown Source)
    at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.readByte(Unknown Source)
    at sun.plugin2.message.AbstractSerializer.readInt(Unknown Source)
    at sun.plugin2.message.transport.SerializingTransport.read(Unknown Source)
    at sun.plugin2.message.Pipe$WorkerThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Timer-0" prio=6 tid=0x02d65c00 nid=0x4e8 in Object.wait() [0x0345f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a java.util.TaskQueue)
    at java.lang.Object.wait(Object.java:485)
    at java.util.TimerThread.mainLoop(Unknown Source)
    - locked  (a java.util.TaskQueue)
    at java.util.TimerThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"traceMsgQueueThread" daemon prio=6 tid=0x02cef400 nid=0xb14 in Object.wait() [0x031cf000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at com.sun.deploy.util.Trace$TraceMsgQueueChecker.run(Unknown Source)
    - locked  (a java.util.ArrayList)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Low Memory Detector" daemon prio=6 tid=0x02c9e400 nid=0x834 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"CompilerThread0" daemon prio=10 tid=0x02c98800 nid=0xf0c waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Attach Listener" daemon prio=10 tid=0x02c96c00 nid=0xec waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Signal Dispatcher" daemon prio=10 tid=0x02c95800 nid=0x464 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Finalizer" daemon prio=8 tid=0x02c8e800 nid=0x900 in Object.wait() [0x02e5f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    - locked  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

"Reference Handler" daemon prio=10 tid=0x02c8d400 nid=0x71c in Object.wait() [0x02e0f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
    - locked  (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
    - None

"main" prio=6 tid=0x002a8000 nid=0x380 in Object.wait() [0x0090f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
    - locked  (a sun.plugin2.message.Queue)
    at sun.plugin2.message.Pipe.receive(Unknown Source)
    at sun.plugin2.main.client.PluginMain.mainLoop(Unknown Source)
    at sun.plugin2.main.client.PluginMain.run(Unknown Source)
    at sun.plugin2.main.client.PluginMain.main(Unknown Source)

   Locked ownable synchronizers:
    - None

"VM Thread" prio=10 tid=0x02c8bc00 nid=0x814 runnable 

"VM Periodic Task Thread" prio=10 tid=0x02ca9400 nid=0x4bc waiting on condition 

JNI global references: 2569

Java并发轨迹解释说,对 Swing 组件及其模型的访问需要在 EDT 上进行。 但是,它无法解决当您拥有多个 EDT 时会发生的情况。

“总是从 EDT 访问 swing 组件”的更好表述可能是:“总是从一个EDT 访问 swing 组件”。

applet 在其 JInternalFrame 中使用的chrriis.dj.nativeswing.swtimpl类正在创建另一个 EDT。

当 EDT#2(内部框架)正在更新文本字段,同时 EDT#0(小程序)试图重新绘制相同的文本字段时,就会发生死锁。

解决方案是不要在 EDT 之间传递任何 Swing 组件或其模型。 而是使用带有内部框架的BlockingQueue作为生产者,使用SwingWorker (由 applet 启动)作为消费者。 一旦 SwingWorker 从 BlockingQueue 读取更新,它就可以通过它的done方法将数据传回它的 EDT。 如果您需要发布中间结果,请使用publishprocess方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM