eisldkw 2023-12-02 11:02 采纳率: 20.5%
浏览 10

关于NETTY中channel().closeFuture()什么时候执行的问题

请问在NETTY中

try {
        //  7 监听通道关闭事件
        //  应用程序会一直等待,直到channel关闭
        ChannelFuture closeFuture = channelFuture.channel().closeFuture() ;
        closeFuture.sync() ;
    } catch (Exception e) {
        e.printStackTrace() ;
        log.error("发生其他异常", e) ;
    } finally {
        //  8 优雅关闭EventLoopGroup,
        //  释放掉所有资源包括创建的线程****
        bossGroup.shutdownGracefully() ;
        workGroup.shutdownGracefully() ;
    }

在以上代码中
1、ChannelFuture closeFuture = channelFuture.channel().closeFuture() 这句话,是channelFuture.channel().closeFuture()中的closeFuture() 执行后返回一个Future给 前面定义的 ChannelFuture closeFuture ,还是 ChannelFuture closeFuture就是channelFuture.channel().closeFuture()
2、.closeFuture() 是 channelFuture.channel().closeFuture() 这句代码中立即执行,还是在其他什么情况下执行。

  • 写回答

2条回答 默认 最新

  • 关注

    1.
    channelFuture.channel().closeFuture()这个返回一个ChannelFuture 类型的对象,= 号把这个对象赋值给closeFuture 。closeFuture 是ChannelFuture 类型的变量,它接收channelFuture.channel().closeFuture()的返回值。
    2.
    函数会立即执行,只要代码执行到这一行代码,就会立即执行,但是close操作不一定立即执行。
    网络通信一般默认是异步的,通信是在单独的通信线程里执行的,也就是函数虽然调用了,但是真正的操作不一定会立即执行。但是,如果你的代码里调用了syncXX函数,closeFuture()就会阻塞等待关闭信号,就变成同步的了,也就是代码会在这一行代码阻塞,直到close操作执行完毕才会继续往下运行。

    评论 编辑记录

报告相同问题?

问题事件

  • 请采纳用户回复 12月15日
  • 创建了问题 12月2日

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?