我目前正在使用Netty编写Java程序,在那里我偶然发现了以下问题:
每当我尝试在“bootstrap”完成后使用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();
}
答案 0 :(得分:1)
这是按预期工作的,closeFuture()
是将在渠道关闭时完成的未来。这意味着如果频道尚未关闭,则未来将永远不会完成,sync()
将无限期阻止。
答案 1 :(得分:0)
修正了它,根本没有任何问题,我的结果是愚蠢的。