title: Tomcat webapp error - application started thread [AWT-Windows] but has failed to stop it - memory leak?
body: <p>I didn't notice it until today during some testing locally on my pc, that Tomcat had posted an error in the log file. I'm using Tomcat 6.0.29 and Java JDK 1.6.</p>
  
  <p><code>
  Dec 1, 2010 12:36:57 pm org.apache.catalina.core.StandardContext reload
  INFO: Reloading this Context has started
  Dec 1, 2010 12:36:57 pm org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
  SEVER: The web application [/AutoSpyder] appears to have started a thread named 
  [AWT-Windows] but has failed to stop it. This is very likely to create a memory 
  leak.</code></p>
  
  <p>What? I've never seen this before. So I checked my log file from yesterday, and sure enough, this error was there too. I don't quite understand what's causing this. </p>
  
  <p><b>Can I assume that it would have to be one of my servlets that uses objects from the <code>java.awt</code> package?</b> If so, how do I pinpoint the code that is causing this?</p>
  
  <p><br><br>
  <b><h1>Edited to add Thread Dump</h1></b></p>
  
  <pre>
  2010-12-01 14:28:18
  Full thread dump Java HotSpot(TM) Client VM (17.1-b03 mixed mode, sharing):
  
  "JMX server connection timeout 34" daemon prio=6 tid=0x03069400 nid=0x960 in Object.wait() [0x0461f000]
     java.lang.Thread.State: TIMED_WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a [I)
      at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150)
      - locked  (a [I)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "RMI Scheduler(0)" daemon prio=6 tid=0x03069000 nid=0xe88 waiting on condition [0x045cf000]
     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(LockSupport.java:198)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
      at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "RMI TCP Connection(1)-192.168.0.102" daemon prio=6 tid=0x0308a400 nid=0xebc runnable [0x0457f000]
     java.lang.Thread.State: RUNNABLE
      at java.net.SocketInputStream.socketRead0(Native Method)
      at java.net.SocketInputStream.read(SocketInputStream.java:129)
      at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
      at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
      - locked  (a java.io.BufferedInputStream)
      at java.io.FilterInputStream.read(FilterInputStream.java:66)
      at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:517)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      -  (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
  
  "RMI TCP Accept-0" daemon prio=6 tid=0x039e0c00 nid=0xc68 runnable [0x0452f000]
     java.lang.Thread.State: RUNNABLE
      at java.net.PlainSocketImpl.socketAccept(Native Method)
      at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
      - locked  (a java.net.SocksSocketImpl)
      at java.net.ServerSocket.implAccept(ServerSocket.java:453)
      at java.net.ServerSocket.accept(ServerSocket.java:421)
      at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34)
      at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
      at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "AWT-Windows" daemon prio=6 tid=0x02b65400 nid=0x7c4 runnable [0x042cf000]
     java.lang.Thread.State: RUNNABLE
      at sun.awt.windows.WToolkit.eventLoop(Native Method)
      at sun.awt.windows.WToolkit.run(WToolkit.java:293)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "Java2D Disposer" daemon prio=10 tid=0x02fccc00 nid=0x93c in Object.wait() [0x039df000]
     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(ReferenceQueue.java:118)
      - locked  (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
      at sun.java2d.Disposer.run(Disposer.java:127)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "http-8080-6" daemon prio=6 tid=0x03322800 nid=0xfec in Object.wait() [0x0395f000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
      - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "http-8080-5" daemon prio=6 tid=0x02ba5c00 nid=0xdbc in Object.wait() [0x0390f000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
      - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "http-8080-4" daemon prio=6 tid=0x02ff6400 nid=0xa1c in Object.wait() [0x038bf000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
      - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "http-8080-3" daemon prio=6 tid=0x0317e400 nid=0x850 in Object.wait() [0x0386f000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
      - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "http-8080-2" daemon prio=6 tid=0x03314800 nid=0xf9c in Object.wait() [0x0381f000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
      - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "http-8080-1" daemon prio=6 tid=0x02efe800 nid=0x250 in Object.wait() [0x037cf000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
      - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "TP-Monitor" daemon prio=6 tid=0x02eed800 nid=0xd64 in Object.wait() [0x0375f000]
     java.lang.Thread.State: TIMED_WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
      at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:565)
      - locked  (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "TP-Processor4" daemon prio=6 tid=0x0318b000 nid=0x998 runnable [0x0370f000]
     java.lang.Thread.State: RUNNABLE
      at java.net.PlainSocketImpl.socketAccept(Native Method)
      at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
      - locked  (a java.net.SocksSocketImpl)
      at java.net.ServerSocket.implAccept(ServerSocket.java:453)
      at java.net.ServerSocket.accept(ServerSocket.java:421)
      at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:312)
      at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:666)
      at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:877)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "TP-Processor3" daemon prio=6 tid=0x0308f800 nid=0x92c in Object.wait() [0x036bf000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)
      - locked  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "TP-Processor2" daemon prio=6 tid=0x03192400 nid=0xfac in Object.wait() [0x0366f000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)
      - locked  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "TP-Processor1" daemon prio=6 tid=0x03182400 nid=0x8d8 in Object.wait() [0x0361f000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
      at java.lang.Object.wait(Object.java:485)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)
      - locked  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "http-8080-Acceptor-0" daemon prio=6 tid=0x03172400 nid=0xf04 runnable [0x035cf000]
     java.lang.Thread.State: RUNNABLE
      at java.net.PlainSocketImpl.socketAccept(Native Method)
      at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
      - locked  (a java.net.SocksSocketImpl)
      at java.net.ServerSocket.implAccept(ServerSocket.java:453)
      at java.net.ServerSocket.accept(ServerSocket.java:421)
      at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
      at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=6 tid=0x03163400 nid=0xbe8 waiting on condition [0x0357f000]
     java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1579)
      at java.lang.Thread.run(Thread.java:662)
  
     Locked ownable synchronizers:
      - None
  
  "GC Daemon" daemon prio=2 tid=0x0307bc00 nid=0x110 in Object.wait() [0x0349f000]
     java.lang.Thread.State: TIMED_WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a sun.misc.GC$LatencyLock)
      at sun.misc.GC$Daemon.run(GC.java:100)
      - locked  (a sun.misc.GC$LatencyLock)
  
     Locked ownable synchronizers:
      - None
  
  "Low Memory Detector" daemon prio=6 tid=0x02aecc00 nid=0x5b4 runnable [0x00000000]
     java.lang.Thread.State: RUNNABLE
  
     Locked ownable synchronizers:
      - None
  
  "CompilerThread0" daemon prio=10 tid=0x02ae7000 nid=0x798 waiting on condition [0x00000000]
     java.lang.Thread.State: RUNNABLE
  
     Locked ownable synchronizers:
      - None
  
  "Attach Listener" daemon prio=10 tid=0x02ae5800 nid=0xddc waiting on condition [0x00000000]
     java.lang.Thread.State: RUNNABLE
  
     Locked ownable synchronizers:
      - None
  
  "Signal Dispatcher" daemon prio=10 tid=0x02ae4000 nid=0xc00 runnable [0x00000000]
     java.lang.Thread.State: RUNNABLE
  
     Locked ownable synchronizers:
      - None
  
  "Finalizer" daemon prio=8 tid=0x02add400 nid=0x378 in Object.wait() [0x02caf000]
     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(ReferenceQueue.java:118)
      - locked  (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
      at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
  
     Locked ownable synchronizers:
      - None
  
  "Reference Handler" daemon prio=10 tid=0x02adbc00 nid=0x474 in Object.wait() [0x02c5f000]
     java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on  (a java.lang.ref.Reference$Lock)
      at java.lang.Object.wait(Object.java:485)
      at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
      - locked  (a java.lang.ref.Reference$Lock)
  
     Locked ownable synchronizers:
      - None
  
  "main" prio=6 tid=0x002b7000 nid=0x14c runnable [0x0090f000]
     java.lang.Thread.State: RUNNABLE
      at java.net.PlainSocketImpl.socketAccept(Native Method)
      at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
      - locked  (a java.net.SocksSocketImpl)
      at java.net.ServerSocket.implAccept(ServerSocket.java:453)
      at java.net.ServerSocket.accept(ServerSocket.java:421)
      at org.apache.catalina.core.StandardServer.await(StandardServer.java:389)
      at org.apache.catalina.startup.Catalina.await(Catalina.java:662)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:614)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
  
     Locked ownable synchronizers:
      - None
  
  "VM Thread" prio=10 tid=0x02ada400 nid=0x210 runnable 
  
  "VM Periodic Task Thread" prio=10 tid=0x02aefc00 nid=0x79c waiting on condition 
  
  JNI global references: 1529
  </pre>