Java 关闭netty 4应用程序会引发RejectedExecutionException

Java 关闭netty 4应用程序会引发RejectedExecutionException,java,netty,Java,Netty,让我们假设以下管道: pipeline.addLast(MY_STATELESS_DECODER); pipeline.addLast(SHARED_EVENT_EXECUTOR, MY_STATELESS_BUSINESS_LOGIC_HANDLER); 我注册了一个ShutdownHook,它可以像这样关闭NetyServer: boundChannel.close().await(5000); bossGroup.shutdownGracefully(0, 10, TimeUnit.SE

让我们假设以下管道:

pipeline.addLast(MY_STATELESS_DECODER);
pipeline.addLast(SHARED_EVENT_EXECUTOR, MY_STATELESS_BUSINESS_LOGIC_HANDLER);
我注册了一个ShutdownHook,它可以像这样关闭NetyServer:

boundChannel.close().await(5000);
bossGroup.shutdownGracefully(0, 10, TimeUnit.SECONDS);
workerGroup.shutdownGracefully(0, 10, TimeUnit.SECONDS);
bossGroup.terminationFuture().awaitUninterruptibly(10, TimeUnit.SECONDS);
workerGroup.terminationFuture().awaitUninterruptibly(10, TimeUnit.SECONDS);
SHARED_EVENT_EXECUTOR.shutdownGracefully(0, 10, TimeUnit.SECONDS);
SHARED_EVENT_EXECUTOR.terminationFuture().awaitUninterruptibly(10, TimeUnit.SECONDS);
但是,当我连接了客户端时,这会抛出一个拒绝执行异常:

java.util.concurrent.RejectedExecutionException: event executor terminated
    at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:703) [netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:296) [netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:691) [netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.channel.DefaultChannelHandlerContext.teardown(DefaultChannelHandlerContext.java:91) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.channel.DefaultChannelHandlerContext.teardown0(DefaultChannelHandlerContext.java:106) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.channel.DefaultChannelHandlerContext.access$000(DefaultChannelHandlerContext.java:29) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.channel.DefaultChannelHandlerContext$1.run(DefaultChannelHandlerContext.java:94) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:325) [netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.confirmShutdown(SingleThreadEventExecutor.java:613) [netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:40) [netty-all-4.0.13.Final.jar:4.0.13.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [netty-all-4.0.13.Final.jar:4.0.13.Final]
    at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
关于应用程序关闭的netty4文档也没有帮助。我是否必须按照特定的顺序关闭我的应用程序

我想要实现的是: 1.停止接受传入消息
2.处理所有排队的消息,这可能涉及在调用shutdown时发送消息,如果有线程将任务放入taskQueue,并且taskQueue不是空的,它将调用reject()方法来拒绝您的放入操作