我目前正在使用Netty用Java编写程序,在其中偶然发现以下问题:
每当在“引导程序”完成后尝试使用channel#closeFuture()。sync()时,它就永远不会完成任务并永远锁定主线程。不会抛出任何异常。
我的启动代码:
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup);
serverBootstrap.channel(NioServerSocketChannel.class);
serverBootstrap.childHandler(new IOLauncher());
this.channel = serverBootstrap.bind(8192).sync().channel();
System.out.println("Debug; closeFuture");
this.channel.closeFuture().sync(); // This never finishes!
System.out.println("Debug; closeFuture done");
} catch (Exception e) {
e.printStackTrace();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
最佳答案
这是按预期方式工作的,closeFuture()
是一个将来将在关闭通道时完成的功能。这意味着,如果尚未关闭通道,将来将永远不会结束,sync()
将无限期地阻塞。