接続と切断に netty を使用しています。しかし、切断しようとすると例外が発生し、原因がよくわかりません。
私はグローバルを持っています:
private ClientBootstrap bootstrap_;
接続しようとすると、次のように実行します。
最初の初期化:
ChannelFactory channelFactory = null;
channelFactory = new OioClientSocketChannelFactory(Executors.newCachedThreadPool());
bootstrap_ = new ClientBootstrap(channelFactory);
に続く:
bootstrap_.setPipelineFactory(() -> {
ChannelPipeline pipeline = Channels.pipeline();
// SOME CODE
});
bootstrap_.setOption("remoteAddress", addr);
bootstrap_.setOption("tcpNoDelay", true);
bootstrap_.setOption("keepAlive", true);
bootstrap_.setOption("configureBlocking", false);
bootstrap_.setOption("connectTimeoutMillis", 5000);
そして実行します:
bootstrap_.connect(addr);
これは成功を返します。
すべてのチャネルを閉じて実行を試みた直後:
bootstrap_.releaseExternalResources();
接続を停止し、ExecutorUtil.java によってスローされた 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."
このような例外がスローされる理由と、正確に発生する原因はわかりません。この問題は本当に私を悩ませています。