大家好:这个问题涉及线程、客户端、Netty 和 Ning。
语境
Ning 库是一个异步 HTTP 请求工具,它允许我们构建请求、对它们进行排队和异步处理它们。它依赖于一些库,例如下面粘贴的 JBoss/Netty 代码。
问题
ExecutorUtil
我最近遇到了一个线程关闭异常,它是由 JBoss/Netty类中的这段代码引发的。
此类似乎本质上是用于在 Netty 中结束线程的实用程序。
这种方法导致我正在使用的 Web 客户端(由 Ning 提供支持)中出现错误,因为我试图关闭处理程序内部的 HttpClient 以获取该客户端的响应。
问题
这段代码试图避免的死锁有什么意义?有关更多详细信息,可以在此代码 url中看到该类。
// Check dead lock.
final Executor currentParent = DeadLockProofWorker.PARENT.get();
if (currentParent != null) {
for (Executor e: executorsCopy) {
if (e == currentParent) {
throw new IllegalStateException(
"An Executor cannot be shut down from the thread " +
"acquired from itself. Please make sure you are " +
"not calling releaseExternalResources() from an " +
"I/O worker thread.");
}
}
}