Java Vertex从悬挂的线中断裂

Java Vertex从悬挂的线中断裂,java,multithreading,vert.x,vertx-verticle,Java,Multithreading,Vert.x,Vertx Verticle,因此,情况是这样的:vert.x后端应用程序有一个worker Verticle实例,它从服务类调用一个静态方法,然后从第三个Java库调用一个方法,该Java库发出一些请求并返回结果 问题出现在第三方lib调用挂起的特定情况下。该应用程序会无限期地停留在 java.base@11.0.8/java.net.SocketInputStream.socketRead0(Native Method) vert.xBlockedThreadChecker开始抛出警告: WARNING: Thread

因此,情况是这样的:vert.x后端应用程序有一个worker Verticle实例,它从服务类调用一个静态方法,然后从第三个Java库调用一个方法,该Java库发出一些请求并返回结果

问题出现在第三方lib调用挂起的特定情况下。该应用程序会无限期地停留在

java.base@11.0.8/java.net.SocketInputStream.socketRead0(Native Method)
vert.x
BlockedThreadChecker
开始抛出警告:

WARNING: Thread Thread[vert.x-worker-thread-18,5,main]=Thread[vert.x-worker-thread-18,5,main] has been blocked for 61537 ms, time limit is 60000 ms 
而眩晕则没有反应

我一直在寻找解决这个问题的办法。如果有其他选择或时间,那么更改整个第三方库可能是一种选择。Worker verticle(我已经在使用)和
ExecuteBlock
不是解决方案,因为这是一个无限阻塞操作。我试着用独立的看门狗竖线识别悬挂,并重新部署它;这在某种程度上帮助了verticle再次发挥作用,但线程检查器仍然发出有关线程阻塞的警告

到目前为止,我找到的最好的解决方案是让一个看门狗识别挂起并重新启动整个应用程序,但这似乎有点激进,如果可能的话,我更愿意在不关闭应用程序的情况下这样做。有没有我忽略的选择


提前感谢您的建议。

事实上,这是一个很难解决的问题,因为JVM中的线程通常是协作的。事实上,这是一个很难解决的问题,因为JVM中的线程通常是协作的。