eisldkw 2023-12-23 05:22 采纳率: 20.5%
浏览 10

NETTY中closeFuture().sync()

NETTY代码如下

public void bing(int port) throws Exception{
        logger.debug("服务器已启动,端口为:"+port);
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        
        try {
            
            ServerBootstrap b = new ServerBootstrap();
            
            b.group(bossGroup, workerGroup);
            b.channel(NioServerSocketChannel.class);
            b.option(ChannelOption.SO_BACKLOG, 1024);
            b.childHandler(new ChildChannelHandler());
            
            ChannelFuture f = b.bind(port).sync();
            
            f.channel().closeFuture().sync();
            
        } finally{
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }        
    }


**以上代码,比如现在建立了10个CHANNEL,现在有一个CHANNEL关闭了,执行了 f.channel().closeFuture().sync(); 执行完之后,会不会导致以下代码

finally{
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }        

立即被执行,而不用等待其余9个CHANNEL的关闭 **

  • 写回答

3条回答 默认 最新

  • CSDN专家-微编程 2024-01-01 13:36
    关注

    根据你提供的代码,当一个 Channel 关闭后,执行 f.channel().closeFuture().sync() 不会导致立即执行 bossGroup.shutdownGracefully() 和 workerGroup.shutdownGracefully()。

    这是因为 f.channel().closeFuture().sync() 方法会阻塞当前线程,直到该 Channel 关闭。但是并不会影响其他 Channel 的关闭操作。

    只有当所有的 Channel 都关闭,并且 closeFuture() 完成后,才会执行 finally 块中的代码来关闭 bossGroup 和 workerGroup。所以其余9个 Channel 的关闭操作会继续执行,然后才会关闭 bossGroup 和 workerGroup。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月23日

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用