programacion - ¿Qué significa "bloqueado" en un seguimiento de pila de Java?
manual programacion android español pdf (2)
Por ejemplo, este es un seguimiento de pila de un servidor Tomcat:
"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 <0x911d3c30> (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)
Mi conjetura es que "bloqueado" significa que la CPU está esperando algún tipo de bloqueo. Sin embargo, si ese es el caso, ¿por qué el estado del subproceso aparece como EJECUTIVO en lugar de BLOQUEADO?
Gracias.
Desde la documentación de java 6 :
Un monitor de objetos está bloqueado al ingresar un bloque o método de sincronización en ese objeto.
Significa que este hilo (RMI TCP Accept-0) tiene propiedad del objeto con el código hash 0x911d3c30, en este caso un java.net.SocksSocketImpl
. Si bien este subproceso es propietario del bloqueo, ningún otro subproceso puede tenerlo, lo que impide que entren en esta parte del código (a menudo una función). Vea aqui para mas informacion:
http://download.oracle.com/javase/tutorial/essential/concurrency/newlocks.html
Además, es RUNNABLE porque aún se está ejecutando ... Si observa que el locked
no se encuentra en la PARTE SUPERIOR de la pila, sino en su interior, eso significa que mantiene el bloqueo y continúa ejecutándose. El siguiente hilo que vendrá por esta sección de código quedará bloqueado por ese bloqueo.
EDITAR Debido a que esto es demasiado incómodo para encajar en un comentario ... Si ve ESTO, está viendo un hilo que está bloqueado. La nota es dice waiting to lock
"http-80-exec-113":
at com.airs.utilities.server.Entity.serializeZip64(Entity.java:6314)
- waiting to lock <0x00007fbefe44d5c8> (a java.lang.String)
at com.airs.utilities.server.Entity.serializeZip64(Entity.java:6300)