title: What does "locked" mean in a Java stack trace?
body: <p>For example, this is a stack trace from a Tomcat server:</p>
  
  <pre><code>    "RMI TCP Accept-0" daemon prio=10 tid=0x091a5800 nid=0x8f1 runnable [0x8b305000]
     java.lang.Thread.State: RUNNABLE
      at java.net.PlainSocketImpl.socketAccept(Native Method)
      at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
      - locked &lt;0x911d3c30&gt; (a java.net.SocksSocketImpl)
      at java.net.ServerSocket.implAccept(ServerSocket.java:462)
      at java.net.ServerSocket.accept(ServerSocket.java:430)
      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)
  </code></pre>
  
  <p>My guess is that "locked" means the CPU is waiting on some sort of a lock. However, if that is the case, why is the thread's state listed as RUNNABLE rather than BLOCKED?</p>
  
  <p>Thanks.</p>