我目前正在使用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()将无限期地阻塞。

10-08 14:36