こんにちは。この質問には、スレッド、クライアント、Netty、および Ning が含まれます。
環境
Ning ライブラリは、非同期 HTTP リクエスト ツールであり、リクエストを作成し、キューに入れ、非同期で処理することができます。以下に貼り付けた JBoss/Netty コードなど、一部のライブラリに依存しています。
問題
私は最近、JBoss/NettyExecutorUtil
クラスのこのコードによってスローされたスレッド終了例外に出くわしました。
このクラスは、基本的に Netty でスレッドを終了するためのユーティリティのようです。
このメソッドは、クライアントの応答のハンドラー内で HttpClient を閉じようとしていたという事実により、使用していた Web クライアント (Ning を使用) でバグを引き起こしていました。
質問
このコード ブロックが回避しようとしているデッドロックの意味は何ですか? 詳細については、このコード 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.");
}
}
}