0

接続と切断に 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."

このような例外がスローされる理由と、正確に発生する原因はわかりません。この問題は本当に私を悩ませています。

4

1 に答える 1