Java JVM在退出时挂起,所有线程都处于阻塞状态

Java JVM在退出时挂起,所有线程都处于阻塞状态,java,jvm,activemq,application-shutdown,introscope,Java,Jvm,Activemq,Application Shutdown,Introscope,我的应用程序关闭得很好,但JVM从未退出。我注意到所有线程都显示为STATE=BLOCKED。ActiveMQ故障转移协议可能会无限期地阻塞,但线程转储似乎根本没有表明这一点。另一个异常值是一个线程,该线程似乎来自处于in_本机状态的CA Wiley工具(Introscope) 你知道是什么导致了这种行为吗 .以下是相关的堆栈跟踪: java.net.SocketInputStream.socketRead0(java.io.FileDescriptor,字节[], int,int,int)@b

我的应用程序关闭得很好,但JVM从未退出。我注意到所有线程都显示为STATE=BLOCKED。ActiveMQ故障转移协议可能会无限期地阻塞,但线程转储似乎根本没有表明这一点。另一个异常值是一个线程,该线程似乎来自处于in_本机状态的CA Wiley工具(Introscope)

你知道是什么导致了这种行为吗


.

以下是相关的堆栈跟踪:

java.net.SocketInputStream.socketRead0(java.io.FileDescriptor,字节[], int,int,int)@bci=0(解释帧) -java.net.SocketInputStream.read(字节[],int,int,int)@bci=87,line=152(解释帧) -java.net.SocketInputStream.read(字节[],int,int)@bci=11,line=122(解释帧) -com.wily.util.io.NonSyncBufferedInputStream.fill()@bci=14,line=54(解释帧) -com.wily.util.io.NonSyncBufferedInputStream.read()@bci=12,line=79(编译帧) -java.io.FilterInputStream.read()@bci=4,line=83(编译帧) -com.wily.util.io.EncryptInputStream.read()@bci=1,line=64(编译帧) -com.wily.org.apache.commons.io.input.ProxyInputStream.read()@bci=4,line=49(编译帧) -com.wily.org.apache.commons.io.input.CountingInputStream.read()@bci=1,line=70(编译帧) -java.io.DataInputStream.readInt()@bci=4,line=387(解释帧) -com.wily.isengard.postofficehub.link.v1.IsengardObjectInputStream.readInt() @bci=4,行=1295(解释帧) -com.wily.isengard.postofficehub.link.v1.IsengardObjectInputStream.setUpStartObjectGraph() @bci=5,行=460(解释帧) -com.wily.isengard.postofficehub.link.v1.IsengardObjectInputStream.readObject() @bci=8,行=258(解释帧) -com.wily.isengard.postofficehub.link.v1.IncomingMessageDeliveryTask.deliverNextMessage(布尔值) @bci=54,行=76(解释帧) -com.wily.isengard.postofficehub.link.v1.IncomingRouteConnector.receiveIncomingMessages(com.wily.isengard.postofficehub.link.v1.IsengardObjectInputStream) @bci=18,行=170(解释帧) -com.wily.isengard.postofficehub.link.v1.IncomingRouteConnector.doTask() @bci=32,行=89(解释帧) -com.wily.isengard.util.threadedExecutable.run()@bci=27,line=192(解释帧)


socketRead0调用正在阻止本机代码中的io。在读取字节之前,它不会返回,或者,如果设置了套接字读取超时,它将超时。它不能被打断。如果您对套接字的创建有任何控制权,请务必执行。

类似于
synchronized(this){while(true);}
的操作可能会导致that@gerrytan-这不会出现在我的线程转储中吗?谢谢你提供的信息。你是说这是一个阻塞IO呼叫吗?你所描述的听起来像是本地代码中的阻塞。是的,我的意思是阻塞。我已经编辑了评论。